/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.app.managebean;

import com.app.ejbcontroler.CitasClientesFacade;
import com.app.ejbcontroler.CitasClientesServiciosFacade;
import com.app.ejbcontroler.ClientesFacade;
import com.app.ejbcontroler.ClientesVisitasFacade;
import com.app.ejbcontroler.ColaboradoresFacade;
import com.app.ejbcontroler.CompaniaCelularFacade;
import com.app.ejbcontroler.DiaslibresColFacade;
import com.app.ejbcontroler.PermisosUsuariosFacade;
import com.app.ejbcontroler.ServiciosFacade;
import com.app.ejbcontroler.UsuariosFacade;
import entidades.CitasClientes;
import entidades.CitasClientesServicios;
import entidades.Clientes;
import entidades.ClientesVisitas;
import entidades.Colaboradores;
import entidades.CompaniaCelular;
import entidades.DiaslibresCol;
import entidades.PermisosUsuarios;
import entidades.Servicios;
import entidades.Usuarios;
import enunms.ROL_USERS;
import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javassist.bytecode.SignatureAttribute.ArrayType;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.application.NavigationHandler;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.transaction.UserTransaction;
import listas.autocompletelista;
import listas.companialista;
import listas.listacitasclientes;
import listas.listacolaboradores;
import listas.listacolaboradoresclientes;
import listas.listacumpleañeros;
import listas.listadeclientesregistrados;
import listas.listadeserviciosagenda;
import listas.listavisitasclientes;
import listas.servicioslista;
import listas.usuarioslista;
import org.primefaces.component.calendar.Calendar;
import org.primefaces.component.fileupload.FileUpload;
import org.primefaces.event.CloseEvent;
import org.primefaces.event.DateSelectEvent;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import utility.StreamUtil;
import utility.apputils;

/**
 *
 * @author nivri
 */
@ManagedBean
@SessionScoped
public class beancontroler_ implements Serializable {
    @EJB
    private CitasClientesServiciosFacade citasClientesServiciosFacade;
    @EJB
    private CitasClientesFacade citasClientesFacade;

    public CitasClientesFacade getCitasClientesFacade() {
        return citasClientesFacade;
    }

    public void setCitasClientesFacade(CitasClientesFacade citasClientesFacade) {
        this.citasClientesFacade = citasClientesFacade;
    }

    public CitasClientesServiciosFacade getCitasClientesServiciosFacade() {
        return citasClientesServiciosFacade;
    }

    public void setCitasClientesServiciosFacade(CitasClientesServiciosFacade citasClientesServiciosFacade) {
        this.citasClientesServiciosFacade = citasClientesServiciosFacade;
    }

    @EJB
    private ClientesVisitasFacade clientesVisitasFacade;

    public ClientesVisitasFacade getClientesVisitasFacade() {
        return clientesVisitasFacade;
    }

    public void setClientesVisitasFacade(ClientesVisitasFacade clientesVisitasFacade) {
        this.clientesVisitasFacade = clientesVisitasFacade;
    }
    @EJB
    private ClientesFacade clientesFacade;

    public ClientesFacade getClientesFacade() {
        return clientesFacade;
    }

    public void setClientesFacade(ClientesFacade clientesFacade) {
        this.clientesFacade = clientesFacade;
    }
    @EJB
    private DiaslibresColFacade diaslibresColFacade;

    public DiaslibresColFacade getDiaslibresColFacade() {
        return diaslibresColFacade;
    }

    public void setDiaslibresColFacade(DiaslibresColFacade diaslibresColFacade) {
        this.diaslibresColFacade = diaslibresColFacade;
    }
    @EJB
    private ColaboradoresFacade colaboradoresFacade;
    @EJB
    private CompaniaCelularFacade companiaCelularFacade;

    public CompaniaCelularFacade getCompaniaCelularFacade() {
        return companiaCelularFacade;
    }

    public ColaboradoresFacade getColaboradoresFacade() {
        return colaboradoresFacade;
    }

    public void setColaboradoresFacade(ColaboradoresFacade colaboradoresFacade) {
        this.colaboradoresFacade = colaboradoresFacade;
    }

    public void setCompaniaCelularFacade(CompaniaCelularFacade companiaCelularFacade) {
        this.companiaCelularFacade = companiaCelularFacade;
    }
    @EJB
    private PermisosUsuariosFacade permisosUsuariosFacade;
    @EJB
    private UsuariosFacade usuariosFacade;
    @PersistenceContext(unitName = "misalonappPU")
    private EntityManager em;

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    protected EntityManager getEntityManager() {
        return em;
    }

    public PermisosUsuariosFacade getPermisosUsuariosFacade() {
        return permisosUsuariosFacade;
    }

    public void setPermisosUsuariosFacade(PermisosUsuariosFacade permisosUsuariosFacade) {
        this.permisosUsuariosFacade = permisosUsuariosFacade;
    }

    public UsuariosFacade getUsuariosFacade() {
        return usuariosFacade;
    }

    public void setUsuariosFacade(UsuariosFacade usuariosFacade) {
        this.usuariosFacade = usuariosFacade;
    }
    private String serviciosdescripcion;
    @EJB
    private ServiciosFacade serviciosFacade;

    public String getServiciosdescripcion() {
        return serviciosdescripcion;
    }

    public void setServiciosdescripcion(String serviciosdescripcion) {
        this.serviciosdescripcion = serviciosdescripcion;
    }

    public ServiciosFacade getServiciosFacade() {
        return serviciosFacade;
    }

    public void setServiciosFacade(ServiciosFacade serviciosFacade) {
        this.serviciosFacade = serviciosFacade;
    }
    private String username;
    private String navigatejsf = "";
    HashMap<String, String> map = new HashMap<String, String>();
    private String rol_user;

    public void habilitardesabiliarsegunrol() {

        if (getRol_user().toString().equals("ROL_ADMIN")) {
            setAcces_perm(true);
            setSelect_accesck1(true);
            setSelect_accesck2(true);
            setSelect_accesck3(true);
            setSelect_accesck4(true);
        } else if (getRol_user().equals("ROL_COLABORADOR")) {
            setAcces_perm(false);
            setSelect_accesck1(false);
            setSelect_accesck2(false);
            setSelect_accesck3(false);
            setSelect_accesck4(true);
        } else {
            setAcces_perm(false);
            setSelect_accesck1(false);
            setSelect_accesck2(false);
            setSelect_accesck3(false);
            setSelect_accesck4(false);
        }

    }
    private boolean acces_perm = false;
    private boolean select_accesck1 = false;
    private boolean select_accesck2 = false;

    public boolean isSelect_accesck1() {
        return select_accesck1;
    }

    public void setSelect_accesck1(boolean select_accesck1) {
        this.select_accesck1 = select_accesck1;
    }

    public boolean isSelect_accesck2() {
        return select_accesck2;
    }

    public void setSelect_accesck2(boolean select_accesck2) {
        this.select_accesck2 = select_accesck2;
    }

    public boolean isSelect_accesck3() {
        return select_accesck3;
    }

    public void setSelect_accesck3(boolean select_accesck3) {
        this.select_accesck3 = select_accesck3;
    }

    public boolean isSelect_accesck4() {
        return select_accesck4;
    }

    public void setSelect_accesck4(boolean select_accesck4) {
        this.select_accesck4 = select_accesck4;
    }
    private boolean select_accesck3 = false;
    private boolean select_accesck4 = false;

    public boolean isAcces_perm() {
        return acces_perm;
    }

    public void setAcces_perm(boolean acces_perm) {
        this.acces_perm = acces_perm;
    }

    public String getRol_user() {
        return rol_user;
    }

    public void setRol_user(String rol_user) {
        this.rol_user = rol_user;
    }

    public String getNavigatejsf() {
        return navigatejsf;
    }
    @Resource
    private javax.transaction.UserTransaction utx;

    public void setNavigatejsf(String navigatejsf) {
        this.navigatejsf = navigatejsf;
    }
    private String locale = "es";

    public String getLocale() {
        return locale;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setLocale(String locale) {
        this.locale = locale;
    }

    private Date limitdate =  new Date();

    public Date getLimitdate() {
        return limitdate;
    }

    public void setLimitdate(Date limitdate) {
        this.limitdate = limitdate;
    }
    /** Creates a new instance of beancontroler_ */
    public beancontroler_() {
    }

    public void changelocale() {
        if (getLocale().toString().equals("en")) {
            locale = "es";
        } else {
            locale = "en";
        }



    }
    private boolean onlyadmin = false;

    public HashMap<String, String> getMap() {
        return map;
    }

    public void setMap(HashMap<String, String> map) {
        this.map = map;
    }

    public boolean isOnlyadmin() {
        return onlyadmin;
    }

    public void setOnlyadmin(boolean onlyadmin) {
        this.onlyadmin = onlyadmin;
    }
    private boolean permisocreate = true;
    private boolean permisodelte = true;
    private boolean permisoupdate = true;

    public boolean isPermisocreate() {
        return permisocreate;
    }

    public void setPermisocreate(boolean permisocreate) {
        this.permisocreate = permisocreate;
    }

    public boolean isPermisodelte() {
        return permisodelte;
    }

    public void setPermisodelte(boolean permisodelte) {
        this.permisodelte = permisodelte;
    }

    public boolean isPermisoupdate() {
        return permisoupdate;
    }

    public void setPermisoupdate(boolean permisoupdate) {
        this.permisoupdate = permisoupdate;
    }

    public void dologin() {

        try {
            Query u = getEm().createNamedQuery("Usuarios.findByNickpass", Usuarios.class);
                    u.setParameter("nick", getUsername().toString());
                    u.setParameter("pass", getPass().toString() );
            List l = u.getResultList();
            if (l != null && l.size() > 0) {

                Usuarios us = (Usuarios) u.getSingleResult();
                Query ro = getEm().createNativeQuery("SELECT id , id FROM misalondb.permisos_usuarios where fk_usuarios = '" + us.getId().toString() + "'");
                List ll =  ro.getResultList();
                String id = "";
                Iterator i = ll.iterator();
                while(i.hasNext()){
                Object[] o = (Object[]) i.next();
                        id = (String) o[0];
                }
                
                Query rol = getEm().createNamedQuery("PermisosUsuarios.findById",PermisosUsuarios.class);
                rol.setParameter("id", id);
                PermisosUsuarios per = (PermisosUsuarios) rol.getSingleResult();
                if (per.getRolUser().equals(ROL_USERS.ADMIN.getValue().toString())) {
                    setOnlyadmin(true);

                } else {
                    setOnlyadmin(false);
                }
                setPermisocreate((per.getCreat().toString().equals("S") ? true : false));
                setPermisodelte((per.getDel().toString().equals("S") ? true : false));
                setPermisoupdate((per.getEdi().toString().equals("S") ? true : false));

                FacesContext fc = FacesContext.getCurrentInstance();
                HttpSession session = (HttpSession) fc.getExternalContext().getSession(true);
                session.setAttribute("username", getUsername());
                map.put(session.getAttribute("id").toString(), getUsername().toString());
                session.setAttribute("HashMap", map);
                
               navigatejsf = ("ventanascumple.xhtml");
               loadcumpleanio();
                // navigatecase(fc, "index");

            } else {
                apputils.addmessageserror("label.messages.label.valid.users");
            }
        } catch (Exception e) {
        }

    }

    public void dologout() {
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) fc.getExternalContext().getSession(true);
        session.setAttribute("username", null);
        map.remove(session.getAttribute("id").toString());
        session.setAttribute("HashMap", map);
        navigatejsf = "";
        navigatecase(fc, "login");
        methodservicesenable(false);


    }
    private servicioslista selectedservicio;
    private listacolaboradores selectedcolaboradores;

    public listacolaboradores getSelectedcolaboradores() {
        return selectedcolaboradores;
    }

    public void setSelectedcolaboradores(listacolaboradores selectedcolaboradores) {
        this.selectedcolaboradores = selectedcolaboradores;
    }

    public servicioslista getSelectedservicio() {
        return selectedservicio;
    }

    public void setSelectedservicio(servicioslista selectedservicio) {
        this.selectedservicio = selectedservicio;
    }
    private boolean rederedservicesadd = false;
    private boolean renderedservicesdelete = true;
    private boolean renderedservicesupdate = true;

    public boolean isRederedservicesadd() {
        return rederedservicesadd;
    }

    public void setRederedservicesadd(boolean rederedservicesadd) {
        this.rederedservicesadd = rederedservicesadd;
    }

    public boolean isRenderedservicesdelete() {
        return renderedservicesdelete;
    }

    public void setRenderedservicesdelete(boolean renderedservicesdelete) {
        this.renderedservicesdelete = renderedservicesdelete;
    }

    public boolean isRenderedservicesupdate() {
        return renderedservicesupdate;
    }

    public void setRenderedservicesupdate(boolean renderedservicesupdate) {
        this.renderedservicesupdate = renderedservicesupdate;
    }
    private boolean visibleadd = false;
    private boolean vicibledelte = true;

    public boolean isVicibledelte() {
        return vicibledelte;
    }

    public void setVicibledelte(boolean vicibledelte) {
        this.vicibledelte = vicibledelte;
    }

    public boolean isVisibleadd() {
        return visibleadd;
    }

    public void setVisibleadd(boolean visibleadd) {
        this.visibleadd = visibleadd;
    }

    public boolean isVisibleupdate() {
        return visibleupdate;
    }

    public void setVisibleupdate(boolean visibleupdate) {
        this.visibleupdate = visibleupdate;
    }
    private boolean visibleupdate = true;

    public void methodservicesenable(boolean _rennable) {

        if (_rennable) {
            rederedservicesadd = true;
            renderedservicesdelete = false;
            renderedservicesupdate = false;
        } else {
            rederedservicesadd = false;
            renderedservicesdelete = true;
            renderedservicesupdate = true;
        }




    }

    public void modificarcolaboradores() {
        setCodecola(getSelectedcolaboradores().getCodeusu().toString());
        setApellidoscola(getSelectedcolaboradores().getApellidos().toString());
        setNombrecola(getSelectedcolaboradores().getNombres().toString());
        methodservicesenable(true);

    }
    private String idcolaboradorselected;

    public String getIdcolaboradorselected() {
        return idcolaboradorselected;
    }

    public void setIdcolaboradorselected(String idcolaboradorselected) {
        this.idcolaboradorselected = idcolaboradorselected;
    }

    public SelectItem[] getColaborador() {

        SelectItem[] item = new SelectItem[colaboradoresFacade.findAll().size()];
        int i = 0;
        for (Colaboradores col : colaboradoresFacade.findAll()) {

            item[i++] = new SelectItem(col.getId(), col.getNombres() + " " + col.getApellidos());
        }
        return item;

    }
    private Date date3;

    public Date getDate3() {
        return date3;
    }

    public void setDate3(Date date3) {
        this.date3 = date3;
    }

    public void handleDateSelect(DateSelectEvent event) {

        Date hoy = new Date();
        List l = null;
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
        String fechahoy = f.format(hoy);
        String fechaselec = f.format(event.getDate());



        if (fechahoy.equals(fechaselec)) {
            //setDate3(null);
            //apputils.addmessageswarn("label.valid.date.now");
            if (getSelecteddiascol() != null) {
                setRenderedservicesdelete(true);
                setRenderedservicesupdate(true);
                setRederedservicesadd(true);

            } else {
                //setRederedservicesadd(true);
            }

        } else if (event.getDate().before(hoy)) {

            apputils.addmessageswarn("label.valid.date.before");
            if (getSelecteddiascol() != null) {
                setRenderedservicesdelete(true);
                setRenderedservicesupdate(true);
                setRederedservicesadd(true);

            } else {
                setRederedservicesadd(true);
            }

        } else {
            if (getSelecteddiascol() != null ) {
                setRenderedservicesdelete(false);
                setRenderedservicesupdate(false);
                setRederedservicesadd(true);
            } else {

                setRederedservicesadd(false);
            }

        }





    }
    private Calendar calendariodias;

    public Calendar getCalendariodias() {
        return calendariodias;
    }

    public void setCalendariodias(Calendar calendariodias) {
        this.calendariodias = calendariodias;
    }

    public void clerardialibre() {
        date3 = null;
        setIdcolaboradorselected("0");
        selecteddiascol = new DiaslibresCol();
        selecteddiascol =  null;

    }
    
    
    private DiaslibresCol selecteddiascol;

    public DiaslibresCol getSelecteddiascol() {
        return selecteddiascol;
    }

    public void setSelecteddiascol(DiaslibresCol selecteddiascol) {
        this.selecteddiascol = selecteddiascol;
    }
    private List<DiaslibresCol> listdias = new ArrayList<DiaslibresCol>();

    public List<DiaslibresCol> getListdias() {
        return listdias;
    }

    public void setListdias(List<DiaslibresCol> listdias) {
        this.listdias = listdias;
    }

    public void agregardialibrecolaborador() {
        DiaslibresCol dia = new DiaslibresCol();
        if (getIdcolaboradorselected().toString().equals("0")) {
        } else {



            SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");

            Query ue = getEm().createNativeQuery("SELECT * FROM misalondb.diaslibres_col where DATE_FORMAT(fecha,'%d/%m/%Y')  = '" + f.format(getDate3()) + "' and fk_col = '" + getIdcolaboradorselected().toString() + "'");
            List l = ue.getResultList();
            if (l != null && l.size() > 0) {
                apputils.addmessageswarn("label.diaasignado.col");





            } else {
                
                Query val =  getEm().createNativeQuery("SELECT * FROM misalondb.citas_clientes where DATE_FORMAT(fechacita,'%d/%m/%Y') = '"+f.format(getDate3())+"' and fk_estilista = '"+getIdcolaboradorselected().toString() +"'");
                List vli = val.getResultList();
                if(vli !=null && vli.size()>0){
                    apputils.addsimpremessageswarn("Este Colaborador Tiene citas asignadas para este dia ..!!");
                    
                    
                }else{


                Query u = getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
                u.setParameter("id",getIdcolaboradorselected().toString());
                Colaboradores col = (Colaboradores) u.getSingleResult();
                dia.setFecha(getDate3());
                dia.setFkCol(col);
                dia.setId(apputils.getUuid().toString());
                diaslibresColFacade.create(dia);
                apputils.addmessagesok("messages.save");

                listdias.clear();
                for (DiaslibresCol cola : diaslibresColFacade.findAll()) {
                    listdias.add(cola);

                }
                clerardialibre();
            }
            }


        }






    }

    public void loadiaslibres() {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);

        listdias.clear();
        for (DiaslibresCol col : diaslibresColFacade.findAll()) {
            listdias.add(col);

        }
        methodservicesenable(false);


    }

    public void loadcompanriacelulares() {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        companialista.clear();
        for (CompaniaCelular compania : companiaCelularFacade.findAll()) {
            companialista lista = new companialista();
            lista.setDescripcion(compania.getDescripcion());
            lista.setId(compania.getId());
            companialista.add(lista);
        }
        selectedservicio = new servicioslista();
        methodservicesenable(false);

    }
    
    private List<listacumpleañeros> cumple =  new ArrayList<listacumpleañeros>();

    public List<listacumpleañeros> getCumple() {
        return cumple;
    }

    public void setCumple(List<listacumpleañeros> cumple) {
        this.cumple = cumple;
    }
    public void loadcumpleanio(){
    
    Query u =  getEm().createNativeQuery("SELECT nombres , apellidos , DATE_FORMAT(fecha_ingreso,'%d/%m/%Y') FROM misalondb.clientes where   DATE_FORMAT(fecha_ingreso,'%d/%m')  = DATE_FORMAT(CURDATE(),'%d/%m')");
    List l = u.getResultList();
    cumple.clear();
    if(l!=null && l.size()>0){
    Iterator itr = l.iterator();
    while(itr.hasNext()){
    listacumpleañeros c =  new listacumpleañeros();
    
    Object[] o =  (Object[]) itr.next();
    c.setFecha("fecha de nacimiento  "+(String)(o[2]!=null?o[2]:""));
    String nombre = (String)(o[0]!=null?o[0]:"")+" "+(String)(o[1]!=null?o[1]:"");
    c.setNombres(nombre);
    cumple.add(c);
   }
        
    }else{
    listacumpleañeros c =  new listacumpleañeros();
    c.setNombres("No hay Cumpleañeros en este mes..!!");
    cumple.add(c);
    
    }
    System.out.println("Cantidad de cumpleañeros "+l.size());
    }

    public void actualizardiaslibre() {
        DiaslibresCol dia = (DiaslibresCol) getSelecteddiascol();
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");

        if (f.format(dia.getFecha()).equals(f.format(getDate3()))) {
            Query u = getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
            u.setParameter("id",getIdcolaboradorselected().toString());
            Colaboradores col = (Colaboradores) u.getSingleResult();
            dia.setFkCol(col);
            dia.setFecha(getDate3());
            diaslibresColFacade.edit(dia);
            apputils.addmessagesok("messages.update");
            listdias.clear();
            for (DiaslibresCol coll : diaslibresColFacade.findAll()) {
                listdias.add(coll);

            }
            methodservicesenable(false);
            clerardialibre();

        } else {

            Query ue = getEm().createNativeQuery("SELECT * FROM misalondb.diaslibres_col where DATE_FORMAT(fecha,'%d/%m/%Y')  = '" + f.format(getDate3()) + "' and fk_col = '" + getIdcolaboradorselected().toString() + "'");
            List l = ue.getResultList();
            if (l != null && l.size() > 0) {
                apputils.addmessageswarn("label.diaasignado.col");

            } else {

               Query u = getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
               u.setParameter("id",getIdcolaboradorselected().toString());
                Colaboradores col = (Colaboradores) u.getSingleResult();
                dia.setFkCol(col);
                dia.setFecha(getDate3());
                diaslibresColFacade.edit(dia);
                apputils.addmessagesok("messages.update");
                listdias.clear();
                for (DiaslibresCol coll : diaslibresColFacade.findAll()) {
                    listdias.add(coll);

                }
                methodservicesenable(false);
                clerardialibre();
            }


        }



    }

    public void eliminardialibre() {
        diaslibresColFacade.remove(getSelecteddiascol());
        listdias.clear();
        apputils.addmessagesok("label.dia.delete");
        for (DiaslibresCol col : diaslibresColFacade.findAll()) {
            listdias.add(col);

        }
        methodservicesenable(false);
        clerardialibre();


    }

    public void modificardialibre() {
        setDate3(getSelecteddiascol().getFecha());
        setIdcolaboradorselected(getSelecteddiascol().getFkCol().getId());
        methodservicesenable(true);

    }

    public void seleccionarvisitas() throws ParseException {
        listavisitasclientes vi = (listavisitasclientes) getSelectedvisitasclientes();
        setServicioclientesvisitas(vi.getIdser());
        setSecripcionserviciocliente(vi.getSerdes());
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
        Date d = f.parse(vi.getFecha());
        setFechavisita(d);
        setVicibledelte(false);
        setVisibleadd(true);
        setVisibleupdate(false);


    }

    public void loadclientesregistrados() throws UnsupportedEncodingException {

        methodservicesenable(true);
        navigatejsf = ("clientes.xhtml");
        try {
            listadeclientesregistrados cl = (listadeclientesregistrados) getSelectedclientes();
            Query u = getEm().createNamedQuery("Clientes.findById",Clientes.class);
            u.setParameter("id",  cl.getId());
            Clientes cli = (Clientes) u.getSingleResult();
            setNombresclientes(cli.getNombres());
            setApellidosclientes(cli.getApellidos());
            setDireccionclientes(cli.getDireccion());
            //setCiudadcliente(cli.get);
            setDepartamentocliente(cli.getDepartamento());
            setEmailcliente(cli.getCorreo());
            setCiudadcliente(cli.getCiudadcliente());
            setSexocliente(cli.getSexo());
            setTelefonocasacliente(cli.getTelcasa());
            setTelefonocelularcliente(cli.getTelcel());
            if (cli.getFkCompania() != null) {

                setCompaniacliente(cli.getFkCompania().getId());
            }
 
            
            maper.clear();
            Query uw = getEm().createNativeQuery("SELECT nombres , apellidos , id FROM misalondb.colaboradores where id in ('"+cli.getAtendidopor1()+"','"+cli.getAtendidopor2()+"','"+cli.getAtendidopor3()+"')");
            List   ll =  uw.getResultList();
            if(ll!=null && ll.size() >0){
                Iterator it = ll.iterator();
                while(it.hasNext()){
                    Object[] o = (Object[]) it.next();
                    maper.put((String)o[2], (String)(o[0]+" "+o[1]));
                    
                    
                    
                    
                }
            colcl.clear();
            Iterator iter = maper.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                listacolaboradoresclientes c = new listacolaboradoresclientes();
                c.setId(entry.getKey().toString());
                c.setNombres(entry.getValue().toString());
                colcl.add(c);

            }
            }
            
            setObservacionesclientes(cli.getObservaciones());
            setIamgecliente(cli.getFoto());
            setCodigocliente(cli.getCodCliente());
            if(cli.getFechaIngreso()!=null){
            setFechadenacimiento(cli.getFechaIngreso());
            }else{
            fechadenacimiento = null;
            }
            
            
            //clearclienteslreg();
            if (cli.getFoto() != null) {
                dbImage = new DefaultStreamedContent(StreamUtil.parseStringToInputStream(cli.getFoto()), "image/jpeg");
            } else {
                dbImage = new DefaultStreamedContent(StreamUtil.parseStringToInputStream(defaultimagecliente), "image/jpeg");
            }

        } catch (Exception f) {
        }

    }

    public void modificompania() {
        setDescripcioncompania(getSelectedcompania().getDescripcion());
        methodservicesenable(true);
    }

    public void modifiservice() {
        setServiciosdescripcion(getSelectedservicio().getDescripcion());
        methodservicesenable(true);
    }

    public void modifiusuario() {
        setNombre(getSelectedusuario().getNombre());
        setNickname(getSelectedusuario().getNick());
        setRol_user(getSelectedusuario().getRoluser().getRolUser());
        setSelect_accesck1((getSelectedusuario().getRoluser().getCreat().equals("S") ? true : false));
        setSelect_accesck2((getSelectedusuario().getRoluser().getEdi().equals("S") ? true : false));
        setSelect_accesck3((getSelectedusuario().getRoluser().getDel().equals("S") ? true : false));
        setSelect_accesck4((getSelectedusuario().getRoluser().getViw().equals("S") ? true : false));
        setPass("0000");
        methodservicesenable(true);
    }

    public void loadhome(){
         HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
     String source = request.getParameter("source");
        navigatejsf = (source);
        methodservicesenable(false);
    }
    
    
    
    
    public void loadadminsetings1(){
    usuarioslista.clear();
        int cont = 0;
        for (Usuarios h : usuariosFacade.findAll()) {
            usuarioslista j = new usuarioslista();
            j.setId(h.getId());
            j.setNick(h.getNick());
            j.setNombre(h.getNombre());
           
            Query u = getEm().createNativeQuery("SELECT id , id FROM misalondb.permisos_usuarios where fk_usuarios ='" + h.getId() + "'");
            List li = u.getResultList();
            if(li!=null && li.size()>0){
            Iterator itr =  li.iterator();
            while(itr.hasNext()){
            Object[] o =  (Object[]) itr.next();
            Query ux =  getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
            ux.setParameter("id", (String)o[0]);
            j.setRoluser((PermisosUsuarios) ux.getSingleResult());
            
            }
            }
           
            usuarioslista.add(j);
            cont++;
    
    }
    }
    public void loadaminsettings() {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        clearusuariosadd();
        usuarioslista.clear();
        int cont = 0;
        for (Usuarios h : usuariosFacade.findAll()) {
            usuarioslista j = new usuarioslista();
            j.setId(h.getId());
            j.setNick(h.getNick());
            j.setNombre(h.getNombre());
           
            Query u = getEm().createNativeQuery("SELECT id , id FROM misalondb.permisos_usuarios where fk_usuarios ='" + h.getId() + "'");
            List li = u.getResultList();
            if(li!=null && li.size()>0){
            Iterator itr =  li.iterator();
            while(itr.hasNext()){
            Object[] o =  (Object[]) itr.next();
            Query ux =  getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
            ux.setParameter("id", (String)o[0]);
            j.setRoluser((PermisosUsuarios) ux.getSingleResult());
            
            }
            }
           
            usuarioslista.add(j);
            cont++;
        }

        String source = request.getParameter("source");
        navigatejsf = (source);
        methodservicesenable(false);
        
    }

    public void loadcolaborador() {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        listacola.clear();
        for (Colaboradores cola : colaboradoresFacade.findAll()) {
            listacolaboradores lista = new listacolaboradores();
            lista.setApellidos(cola.getApellidos().toString());
            lista.setCodeusu(cola.getCodigoCol().toString());
            lista.setNombres(cola.getNombres().toString());
            lista.setId(cola.getId().toString());

            listacola.add(lista);
        }
        navigatejsf = (source);
        methodservicesenable(false);

    }

    public void clearclienteslreg() {
        setNombresclientes("");
        setApellidosclientes("");
        setDireccionclientes("");
        setCiudadcliente("");
        setDepartamentocliente("0");
        setEmailcliente("");
        setSexocliente("0");
        setTelefonocasacliente("");
        setTelefonocelularcliente("");
        setCompaniacliente("0");
        setCodigoclientesfil("");
        setColaclinetes("0");
        setObservacionesclientes("");
        setIamgecliente("");
        colcl.clear();
        maper.clear();
        
        setCodigocliente("");
        fechadenacimiento = null;
        selectedclientes = new listadeclientesregistrados();



    }
    
    
    public void loadsms(){
     HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        methodservicesenable(true);
    
    }
    

    public void loadagendaclientes(){
         HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        methodservicesenable(true);
        listacitas.clear();
        loadcitasclientes();
    
    
    }
    
    
    
    
    public void loadclientesreg2() throws UnsupportedEncodingException {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        methodservicesenable(true);
        selectedclientes   =  new listadeclientesregistrados();

        loadclientesreg();


    }

    public void loadclientes() throws UnsupportedEncodingException {


        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        clearclienteslreg();
        methodservicesenable(false);
        dbImage = new DefaultStreamedContent(StreamUtil.parseStringToInputStream(defaultimagecliente), "image/jpeg");

    }

    public void loadcompaniacelulares() {

        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        companialista.clear();
        for (CompaniaCelular compania : companiaCelularFacade.findAll()) {
            companialista lista = new companialista();
            lista.setDescripcion(compania.getDescripcion());
            lista.setId(compania.getId());
            companialista.add(lista);
        }
        navigatejsf = (source);


    }

    public void loadservicios() {
        HttpServletRequest request =
                (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        String source = request.getParameter("source");
        navigatejsf = (source);
        servilista.clear();
        for (Servicios servicio : serviciosFacade.findAll()) {
            servicioslista lista = new servicioslista();
            lista.setDescripcion(servicio.getDescripcion());
            lista.setId(servicio.getId());
            servilista.add(lista);
        }
        methodservicesenable(false);

    }

    public void eliminarusuarios() {
        if (getSelectedusuario().getId() != null) {
            try {
                Query u = serviciosFacade.getEm().createNativeQuery("SELECT * FROM usuarios WHERE id='" + getSelectedusuario().getId().toString() + "'", Usuarios.class);
                Usuarios ser = (Usuarios) u.getSingleResult();
                Query per = getEm().createNativeQuery("SELECT * FROM permisos_usuarios where fk_usuarios ='" + getSelectedusuario().getId() + "'", PermisosUsuarios.class);
                permisosUsuariosFacade.remove((PermisosUsuarios) per.getSingleResult());
                usuariosFacade.remove(ser);
                usuarioslista.clear();
                clearusuariosadd();
                selectedusuario = new usuarioslista();
                apputils.addmessagesok("label.usuario.deleted");
                methodservicesenable(false);
                int cont = 0;
                if (!usuariosFacade.findAll().isEmpty() && usuariosFacade.findAll().size() > 0) {
                    usuarioslista.clear();
                for (Usuarios h : usuariosFacade.findAll()) {
                    usuarioslista j = new usuarioslista();
                    j.setId(h.getId());
                    j.setNick(h.getNick());
                    j.setNombre(h.getNombre());
                    Query n = getEm().createNativeQuery("SELECT id  , id FROM misalondb.permisos_usuarios where fk_usuarios ='" + h.getId() + "'");
                    
                    List li = n.getResultList();
                    if (li != null && li.size() > 0) {
                        Iterator itr = li.iterator();
                        while (itr.hasNext()) {
                            Object[] o = (Object[]) itr.next();
                            Query ux = getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
                            ux.setParameter("id", (String) o[0]);
                            j.setRoluser((PermisosUsuarios) ux.getSingleResult());

                        }

                    }
                    usuarioslista.add(j);
                    cont++;
                }
                }

            } catch (Exception e) {
            }
        }
    }

    public void actualizarcliente() {
        Query u = companiaCelularFacade.getEm().createNamedQuery("Clientes.findById", Clientes.class);
        u.setParameter("id",getSelectedclientes().getId().toString());
        Clientes cl = (Clientes) u.getSingleResult();
        try {


            if (getNombresclientes() == null || getNombresclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar  Nombres");

            } else if (getApellidosclientes() == null || getApellidosclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar Apellidos");

            } 
            else if(getFechadenacimiento() == null){
             apputils.addsimplemessages("Debe de Ingresar Fecha de Nacimiento");
            }
            
            else if (getDireccionclientes() == null || getDireccionclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar Direccion");
            } else if (getCiudadcliente() == null || getCiudadcliente().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar la ciudad");
            } else if (getDepartamentocliente().toString().equals("0")) {
                apputils.addsimplemessages("Seleccione un Departamento");
            } else if (getSexocliente().toString().equals("0")) {
                apputils.addsimplemessages("Seleccione Sexo del Cliente");

            } else {



                cl.setApellidos(getApellidosclientes());
                cl.setCodCliente(getCodigocliente());
                cl.setCorreo((getEmailcliente()) != null ? getEmailcliente().toString() : "");
                cl.setDepartamento(getDepartamentocliente());
                cl.setDireccion(getDireccionclientes());
                cl.setFechaIngreso(getFechadenacimiento());
                cl.setFoto((getIamgecliente() != null ? getIamgecliente() : defaultimagecliente));
                cl.setNombres(getNombresclientes());
                cl.setCiudadcliente((getCiudadcliente()!=null ?getCiudadcliente():""));
                cl.setSexo(getSexocliente());
                cl.setTelcasa((getTelefonocasacliente() != null ? getTelefonocasacliente().toString() : ""));
                cl.setTelcel((getTelefonocelularcliente() != null ? getTelefonocelularcliente().toString() : ""));
                if (!getCompaniacliente().toString().equals("0")) {
                    Query uu = getEm().createNamedQuery("CompaniaCelular.findById", CompaniaCelular.class);
                    uu.setParameter("id",getCompaniacliente().toString());
                    CompaniaCelular com = (CompaniaCelular) uu.getSingleResult();
                    cl.setFkCompania(com);
                }
                cl.setObservaciones((getObservacionesclientes()) != null ? getObservacionesclientes().toString() : "");
                 int cont =0;
                 
                 if(colcl!=null && colcl.size() > 0){
                 String cl1 ="";
                 String cl2 ="";
                 String cl3 ="";
                    Iterator  itr = colcl.iterator();
                    while(itr.hasNext()){
                      listacolaboradoresclientes  l =  (listacolaboradoresclientes) itr.next();
                       if(cont ==0){
                        cl1 = l.getId();
                           
                       }else if(cont ==1){
                       cl2 = l.getId();
                           
                       }else{
                       cl3 = l.getId();
                       
                       }
                       cont++;
                      
                    
                    }
                           cl.setAtendidopor3(cl3);
                           cl.setAtendidopor2(cl2);
                           cl.setAtendidopor1(cl1);
                 
                 }else{
                           cl.setAtendidopor3("");
                           cl.setAtendidopor2("");
                           cl.setAtendidopor1("");
                 
                 
                 }

                clientesFacade.edit(cl);
                setColaclinetes("0");
                apputils.addsimplemessages("Datos Actualizados con Exito ..!");
                methodservicesenable(true);
            }
        } catch (Exception e) {
        }



    }

    public void cancelarcliente() {
        clearclienteslreg();
        methodservicesenable(false);
        navigatejsf = ("clientesvisitas.xhtml");
         loadclientesreg();

    }

    public void eliminarcliente() {
        //SELECT * FROM clientes where id

        Query u = companiaCelularFacade.getEm().createNamedQuery("Clientes.findById", Clientes.class);
        u.setParameter("id",getSelectedclientes().getId().toString());
        Clientes cl = (Clientes) u.getSingleResult();
        Query cv =  getEm().createNamedQuery("ClientesVisitas.findByFkClientes",ClientesVisitas.class);
        cv.setParameter("fkClientes", getSelectedclientes().getId().toString());
        List  lc =  cv.getResultList();
        if(lc!=null && lc.size()>0){
        apputils.addsimpremessageswarn("Cliente Tiene Visitas Asociadas!!");
        }else{
        clientesFacade.remove(cl);
        apputils.addsimplemessages("Cliente Eliminado Con Exito ..!!");
        loadclientesreg();
        clearclienteslreg();
        methodservicesenable(false);
        navigatejsf = ("clientesvisitas.xhtml");
        }

    }

    public void eliminarcolaborador() {

        if (getSelectedcolaboradores().getId() != null) {
            Query u = companiaCelularFacade.getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
            u.setParameter("id",  getSelectedcolaboradores().getId().toString() );
            Colaboradores ser = (Colaboradores) u.getSingleResult();
            colaboradoresFacade.remove(ser);
            apputils.addmessagesok("label.company.col");
            listacola.clear();
            for (Colaboradores cola : colaboradoresFacade.findAll()) {
                listacolaboradores lista = new listacolaboradores();
                lista.setApellidos(cola.getApellidos().toString());
                lista.setId(cola.getId());
                lista.setCodeusu(cola.getCodigoCol().toString());
                lista.setNombres(cola.getNombres().toString());
                listacola.add(lista);
            }


            methodservicesenable(false);
        } else {
            apputils.addmessagesok("label.services_error_delete");
        }

        claercola();


    }

    public void eliminarcompania() {

        if (getSelectedcompania().getId() != null) {
            Query u = companiaCelularFacade.getEm().createNamedQuery("CompaniaCelular.findById", CompaniaCelular.class);
            u.setParameter("id", getSelectedcompania().getId().toString());
            CompaniaCelular ser = (CompaniaCelular) u.getSingleResult();
            companiaCelularFacade.remove(ser);
            apputils.addmessagesok("label.company.delete");
            companialista.clear();
            for (CompaniaCelular servicio : companiaCelularFacade.findAll()) {
                companialista lista = new companialista();
                lista.setDescripcion(servicio.getDescripcion());
                lista.setId(servicio.getId());
                companialista.add(lista);
            }


            methodservicesenable(false);
        } else {
            apputils.addmessagesok("label.services_error_delete");
        }

        setDescripcioncompania("");

    }

    public void elimianrservicio() {
        if (getSelectedservicio().getId() != null) {
            Query u = serviciosFacade.getEm().createNamedQuery("Servicios.findById", Servicios.class);
            u.setParameter("id",getSelectedservicio().getId().toString());
            Servicios ser = (Servicios) u.getSingleResult();
            serviciosFacade.remove(ser);
            apputils.addmessagesok("label.services.delete");
            servilista.clear();
            for (Servicios servicio : serviciosFacade.findAll()) {
                servicioslista lista = new servicioslista();
                lista.setDescripcion(servicio.getDescripcion());
                lista.setId(servicio.getId());
                servilista.add(lista);
            }


            methodservicesenable(false);
        } else {
            apputils.addmessagesok("label.services_error_delete");
        }

        setServiciosdescripcion("");

    }
    List<servicioslista> servilista = new ArrayList<servicioslista>();
    List<usuarioslista> usuarioslista = new ArrayList<usuarioslista>();
    List<companialista> companialista = new ArrayList<companialista>();

    public List<companialista> getCompanialista() {
        return companialista;
    }

    public void setCompanialista(List<companialista> companialista) {
        this.companialista = companialista;
    }

    public List<usuarioslista> getUsuarioslista() {
        return usuarioslista;
    }

    public void setUsuarioslista(List<usuarioslista> usuarioslista) {
        this.usuarioslista = usuarioslista;
    }

    public List<servicioslista> getServilista() {
        return servilista;
    }

    public void setServilista(List<servicioslista> servilista) {
        this.servilista = servilista;
    }

    public void actualizarusuario() {
        try {
            Query u = serviciosFacade.getEm().createNamedQuery("Usuarios.findById", Usuarios.class);
            u.setParameter("id", getSelectedusuario().getId().toString());
            Usuarios ser = (Usuarios) u.getSingleResult();
            Query per = getEm().createNativeQuery("SELECT fk_usuarios , id FROM permisos_usuarios where fk_usuarios ='" + getSelectedusuario().getId() + "'");
            List lis = per.getResultList();
            PermisosUsuarios permi  = null;
            if(lis!=null && lis.size()>0){
            Iterator it =  lis.iterator();
            while(it.hasNext()){
            Object[] o = (Object[]) it.next();
            Query lu =  getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
            lu.setParameter("id", (String)o[1]);
            permi = (PermisosUsuarios) lu.getSingleResult();
            
            }
            }
            
            
            
            ser.setNick(getNickname().toString());
            ser.setNombre(getNombre().toString());
            if (!getPass().toString().equals("0000")) {
                ser.setPass(getPass().toString());
            }

            permi.setCreat((isSelect_accesck1() == true ? "S" : "N"));
            permi.setDel((isSelect_accesck3() == true ? "S" : "N"));
            permi.setEdi((isSelect_accesck2() == true ? "S" : "N"));
            permi.setViw((isSelect_accesck4() == true ? "S" : "N"));
            permi.setRolUser(getRol_user().toString());
            usuariosFacade.edit(ser);
            permisosUsuariosFacade.edit(permi);
            clearusuariosadd();
           usuarioslista.clear();
                int cont = 0;
                for (Usuarios h : usuariosFacade.findAll()) {
                    usuarioslista j = new usuarioslista();
                    j.setId(h.getId());
                    j.setNick(h.getNick());
                    j.setNombre(h.getNombre());
                    Query n = getEm().createNativeQuery("SELECT id  , id FROM misalondb.permisos_usuarios where fk_usuarios ='" + h.getId() + "'");
                    
                    List li = n.getResultList();
                    if (li != null && li.size() > 0) {
                        Iterator itr = li.iterator();
                        while (itr.hasNext()) {
                            Object[] o = (Object[]) itr.next();
                            Query ux = getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
                            ux.setParameter("id", (String) o[0]);
                            j.setRoluser((PermisosUsuarios) ux.getSingleResult());

                        }

                    }
                    usuarioslista.add(j);
                    cont++;
                }
            methodservicesenable(false);
            apputils.addmessagesok("label.usuarui.update");
        } catch (Exception e) {
        }

    }

    public void actualizarcolaborador() {


       Query u = companiaCelularFacade.getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
        u.setParameter("id",  getSelectedcolaboradores().getId().toString() );
        Colaboradores ser = (Colaboradores) u.getSingleResult();
        ser.setApellidos(getApellidoscola().toString());
        ser.setCodigoCol(getCodecola().toString());
        ser.setNombres(getNombrecola().toString());

        colaboradoresFacade.edit(ser);
        apputils.addmessagesok("messages.update");
        setDescripcioncompania("");
        listacola.clear();
        for (Colaboradores cola : colaboradoresFacade.findAll()) {
            listacolaboradores lista = new listacolaboradores();
            lista.setApellidos(cola.getApellidos().toString());
            lista.setCodeusu(cola.getCodigoCol().toString());
            lista.setNombres(cola.getNombres().toString());
            lista.setId(cola.getId().toString());

            listacola.add(lista);
        }
        selectedcolaboradores = new listacolaboradores();
        methodservicesenable(false);
       claercola();
        


    }

    public void actualizarcompania() {
    Query u = companiaCelularFacade.getEm().createNamedQuery("CompaniaCelular.findById", CompaniaCelular.class);
         u.setParameter("id", getSelectedcompania().getId().toString());
        CompaniaCelular ser = (CompaniaCelular) u.getSingleResult();
        ser.setDescripcion(getDescripcioncompania().toString());
        companiaCelularFacade.edit(ser);
        apputils.addmessagesok("messages.update");
        setDescripcioncompania("");
        companialista.clear();
        for (CompaniaCelular servicio : companiaCelularFacade.findAll()) {
            companialista lista = new companialista();
            lista.setDescripcion(servicio.getDescripcion());
            lista.setId(servicio.getId());
            companialista.add(lista);
        }
        methodservicesenable(false);
        selectedcompania = new companialista();

    }

    public void actualizarservicio() {
         Query u = serviciosFacade.getEm().createNamedQuery("Servicios.findById", Servicios.class);
         u.setParameter("id",getSelectedservicio().getId().toString());
        Servicios ser = (Servicios) u.getSingleResult();
        ser.setDescripcion(getServiciosdescripcion().toString());
        serviciosFacade.edit(ser);
        apputils.addmessagesok("messages.update");
        setServiciosdescripcion("");
        servilista.clear();
        for (Servicios servicio : serviciosFacade.findAll()) {
            servicioslista lista = new servicioslista();
            lista.setDescripcion(servicio.getDescripcion());
            lista.setId(servicio.getId());
            servilista.add(lista);
        }
        methodservicesenable(false);
        selectedservicio = new servicioslista();

    }
    private String descripcioncompania;

    public String getDescripcioncompania() {
        return descripcioncompania;
    }

    public void setDescripcioncompania(String descripcioncompania) {
        this.descripcioncompania = descripcioncompania;
    }

    public void agregarcompania() {

        CompaniaCelular cel = null;

        cel = new CompaniaCelular();

        try {

            cel.setDescripcion(getDescripcioncompania().toString());
            cel.setId(apputils.getUuid());
            companiaCelularFacade.create(cel);
            apputils.addmessagesok("messages.save");
            setDescripcioncompania("");
            companialista.clear();
            for (CompaniaCelular compania : companiaCelularFacade.findAll()) {
                companialista lista = new companialista();
                lista.setDescripcion(compania.getDescripcion());
                lista.setId(compania.getId());
                companialista.add(lista);
            }
            selectedservicio = new servicioslista();

        } catch (Exception r) {
        }



    }
    private companialista selectedcompania;

    public companialista getSelectedcompania() {
        return selectedcompania;
    }

    public void setSelectedcompania(companialista selectedcompania) {
        this.selectedcompania = selectedcompania;
    }

    public void agregarservicio() {
        Servicios ser = null;

        ser = new Servicios();

        try {

            ser.setDescripcion(getServiciosdescripcion().toString());
            ser.setId(apputils.getUuid());
            serviciosFacade.create(ser);
            apputils.addmessagesok("messages.save");
            setServiciosdescripcion("");
            servilista.clear();
            for (Servicios servicio : serviciosFacade.findAll()) {
                servicioslista lista = new servicioslista();
                lista.setDescripcion(servicio.getDescripcion());
                lista.setId(servicio.getId());
                servilista.add(lista);
            }
            selectedservicio = new servicioslista();

        } catch (Exception r) {
        }





    }

    public void navigatecase(FacesContext fx, String cases) {
        NavigationHandler nh = fx.getApplication().getNavigationHandler();
        nh.handleNavigation(fx, null, cases);
    }
    private String filltext;

    public String getFilltext() {
        return filltext;
    }

    public void setFilltext(String filltext) {
        this.filltext = filltext;
    }
    private String filtertextclientes = "";

    public String getFiltertextclientes() {
        return filtertextclientes;
    }

    public void setFiltertextclientes(String filtertextclientes) {
        this.filtertextclientes = filtertextclientes;
    }
    private String idclientesearch;

    public String getIdclientesearch() {
        return idclientesearch;
    }

    public void setIdclientesearch(String idclientesearch) {
        this.idclientesearch = idclientesearch;
    }
    private String codigoclientesfil;

    public String getCodigoclientesfil() {
        return codigoclientesfil;
    }

    public void setCodigoclientesfil(String codigoclientesfil) {
        this.codigoclientesfil = codigoclientesfil;
    }

    public void filtrasoloporidcliente() {

        Query u = getEm().createNamedQuery("Clientes.findByCodCliente", Clientes.class);
        u.setParameter("codCliente", getCodigoclientesfil().toString().toUpperCase());
        List l = u.getResultList();
        Iterator it = l.iterator();
        clientereg.clear();
        while (it.hasNext()) {
            Clientes cl = (Clientes) it.next();
            listadeclientesregistrados cli = new listadeclientesregistrados();
            cli.setApelldios(cl.getApellidos());
            cli.setCelular(cl.getTelcel());
            cli.setCodigo(cl.getCodCliente());
            if (cl.getFkCompania() != null) {
                cli.setCompaniacelular(cl.getFkCompania().getDescripcion());
            } else {
                cli.setCompaniacelular("");
            }

            cli.setId(cl.getId());
            cli.setNombres(cl.getNombres());

            clientereg.add(cli);
        }


    }

    public void filrarclientefulldata() {

        Query u = getEm().createNativeQuery("SELECT a.id , a.id FROM clientes a left join compania_celular b  on a.fk_compania=b.id WHERE CONCAT( a.cod_cliente, \" \", a.nombres, \" \", a.apellidos,\" \",a.direccion,\" \",a.telcel,\" \",b.descripcion,\" \",a.correo,\" \",a.telcasa,\" \",case when a.sexo = 'M' then 'Masculino' else 'Femenino'end )like '%" + getFiltertextclientes().toString() + "%'");
        List l = u.getResultList();
        Iterator it = l.iterator();
        clientereg.clear();
        while (it.hasNext()) {
            Object[] ob = (Object[]) it.next();
            Query uc =  getEm().createNamedQuery("Clientes.findById", Clientes.class);
            uc.setParameter("id", (String)ob[0]);
            Clientes cl = (Clientes)uc.getSingleResult();
            listadeclientesregistrados cli = new listadeclientesregistrados();
            cli.setApelldios(cl.getApellidos());
            cli.setCelular(cl.getTelcel());
            Query  ua =   getEm().createNativeQuery("SELECT   max(a.fechavisita) ,max(a.fechavisita) FROM misalondb.clientes_visitas a  where  fk_clientes = '"+cl.getId()+"'");
            List ll  =  ua.getResultList();
            if(ll!=null && ll.size()>0){
            Iterator  ita =  ll.iterator();
            while(ita.hasNext()){
            Object[] o = (Object[]) ita.next();  
            SimpleDateFormat f =  new SimpleDateFormat("dd/MM/yyyy");
            if((Date)o[0]!=null){
            cli.setUltimafechavisita(f.format((Date)o[0]));
            }
            
                    
            }
            }
            cli.setCodigo(cl.getCodCliente());
            if (cl.getFkCompania() != null) {
                cli.setCompaniacelular(cl.getFkCompania().getDescripcion());
            } else {
                cli.setCompaniacelular("");
            }

            cli.setId(cl.getId());
            cli.setNombres(cl.getNombres());

            clientereg.add(cli);
        }



    }

    public void filtercolaboradores() {
        Query u = colaboradoresFacade.getEm().createNamedQuery("Colaboradores.findByliked", Colaboradores.class);
        u.setParameter("nombres","%"+getFilltext().toString()+"%");
        List l = u.getResultList();
        Iterator it = l.iterator();
        listacola.clear();
        while (it.hasNext()) {
            Colaboradores se = (Colaboradores) it.next();
            listacolaboradores lista = new listacolaboradores();
            lista.setApellidos(se.getApellidos().toString());
            lista.setCodeusu(se.getCodigoCol().toString());
            lista.setId(se.getId().toString());
            lista.setNombres(se.getNombres().toString());

            listacola.add(lista);

        }

    }

    public void filterdialibre() {

        String sql ="select    a.id ,  a.id  from  diaslibres_col a , colaboradores b  where a.fk_col=b.id and concat(b.nombres,\" \",b.apellidos , \" \",b.codigo_col ) like '%"+getFilltext().toString()+"%'";
        Query ux =  getEm().createNativeQuery(sql);
        List li =  ux.getResultList();
        if(li!=null && li.size()> 0){
        Iterator itr = li.iterator();
        listdias.clear();
        while(itr.hasNext()){
        Object[]  o = (Object[]) itr.next();
        
        Query u = colaboradoresFacade.getEm().createNamedQuery("DiaslibresCol.findById", DiaslibresCol.class);
        u.setParameter("id", (String)o[0]);
        List l = u.getResultList();
        Iterator it = l.iterator();
        
        while (it.hasNext()) {
            DiaslibresCol se = (DiaslibresCol) it.next();
            listdias.add(se);

        }
        
        }
        
            
       
       
            
            
        }
        
        
       


    }

    public void filtertablecompania() {

        Query u = serviciosFacade.getEm().createNamedQuery("CompaniaCelular.findByDescripcion" , CompaniaCelular.class);
        u.setParameter("descripcion", "%"+getFilltext().toString()+"%");
        List l = u.getResultList();
        Iterator it = l.iterator();
        companialista.clear();
        while (it.hasNext()) {
            CompaniaCelular se = (CompaniaCelular) it.next();
            companialista lista = new companialista();
            lista.setDescripcion(se.getDescripcion());
            lista.setId(se.getId());
            companialista.add(lista);

        }
    }

    public void quepaod() {

        System.out.println("mierdaaaaa");

    }

    public void filtertable() {
        Query u = serviciosFacade.getEm().createNamedQuery("Servicios.findlike", Servicios.class);
        u.setParameter("descripcion","%" + getFilltext().toString() + "%");
        List l = u.getResultList();
        Iterator it = l.iterator();
        servilista.clear();
        while (it.hasNext()) {
            Servicios se = (Servicios) it.next();
            servicioslista lista = new servicioslista();
            lista.setDescripcion(se.getDescripcion());
            lista.setId(se.getId());
            servilista.add(lista);

        }
    }
    private String nickname;
    private String nombre;
    private String pass;

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
    private usuarioslista selectedusuario;

    public usuarioslista getSelectedusuario() {
        return selectedusuario;
    }

    public void setSelectedusuario(usuarioslista selectedusuario) {
        this.selectedusuario = selectedusuario;
    }

    public void clearusuariosadd() {
        setNickname("");
        setNombre("");
        setPass("");
        select_accesck1 = false;
        select_accesck2 = false;
        select_accesck3 = false;
        select_accesck4 = false;
        setRol_user("C");
        selectedusuario = new usuarioslista();

    }

    public void agregarusuarios() {

        try {

            if (getRol_user().toString().equals("C")) {
                apputils.addmessageserror("label.validate.user.rol");
            } else {
                String key = apputils.getUuid().toString();
                Usuarios usu = new Usuarios();
                usu.setId(key);

                usu.setNick(getNickname().toString());
                usu.setNombre(getNombre().toString());
                usu.setPass(getPass().toString());
                usuariosFacade.create(usu);
                Query u = getEm().createNamedQuery("Usuarios.findById", Usuarios.class);
                u.setParameter("id",key);
                Usuarios us = (Usuarios) u.getSingleResult();
                PermisosUsuarios per = new PermisosUsuarios();
                per.setCreat((isSelect_accesck1() == true ? "S" : "N"));
                per.setDel((isSelect_accesck3() == true ? "S" : "N"));
                per.setEdi((isSelect_accesck2() == true ? "S" : "N"));
                per.setViw((isSelect_accesck4() == true ? "S" : "N"));
                per.setId(apputils.getUuid().toString());
                per.setRolUser(getRol_user().toString());
                per.setFkUsuarios(us);
                permisosUsuariosFacade.create(per);
                clearusuariosadd();
                usuarioslista.clear();
                int cont = 0;
                for (Usuarios h : usuariosFacade.findAll()) {
                    usuarioslista j = new usuarioslista();
                    j.setId(h.getId());
                    j.setNick(h.getNick());
                    j.setNombre(h.getNombre());
                    Query n = getEm().createNativeQuery("SELECT id  , id FROM misalondb.permisos_usuarios where fk_usuarios ='" + h.getId() + "'");
                    
                    List li = n.getResultList();
                    if (li != null && li.size() > 0) {
                        Iterator itr = li.iterator();
                        while (itr.hasNext()) {
                            Object[] o = (Object[]) itr.next();
                            Query ux = getEm().createNamedQuery("PermisosUsuarios.findById", PermisosUsuarios.class);
                            ux.setParameter("id", (String) o[0]);
                            j.setRoluser((PermisosUsuarios) ux.getSingleResult());

                        }

                    }
                    usuarioslista.add(j);
                    cont++;
                }

            }
            
           clearusuariosadd();
           
        
        } catch (Exception e) {
        }

    }
    private String codecola;
    private String nombrecola;
    private String apellidoscola;

    public void claercola() {
        setCodecola("");
        setApellidoscola("");
        setNombrecola("");


    }

    public String getApellidoscola() {
        return apellidoscola;
    }

    public void setApellidoscola(String apellidoscola) {
        this.apellidoscola = apellidoscola;
    }

    public String getCodecola() {
        return codecola;
    }

    public void setCodecola(String codecola) {
        this.codecola = codecola;
    }

    public String getNombrecola() {
        return nombrecola;
    }

    public void setNombrecola(String nombrecola) {
        this.nombrecola = nombrecola;
    }

    public void validarcodigocolaborador() {

        Query u = colaboradoresFacade.getEm().createNativeQuery("SELECT * FROM misalondb.colaboradores WHERE codigo_col = '" + getCodecola().toString() + "'");

        List list = u.getResultList();
        if (list != null && list.size() > 0) {
            apputils.addmessageswarn("label.messeges.validar.cola");
        }



    }
    private List<listacolaboradores> listacola = new ArrayList<listacolaboradores>();

    public List<listacolaboradores> getListacola() {
        return listacola;
    }

    public void setListacola(List<listacolaboradores> listacola) {
        this.listacola = listacola;
    }

    public void agregarcolaborador() {

        Colaboradores col = null;

        col = new Colaboradores();

        try {

            col.setApellidos(getApellidoscola().toString());
            col.setId(apputils.getUuid());
            col.setNombres(getNombrecola().toString());
            col.setCodigoCol(getCodecola().toString());

            colaboradoresFacade.create(col);
            apputils.addmessagesok("messages.save");
            claercola();
            listacola.clear();
            for (Colaboradores cola : colaboradoresFacade.findAll()) {
                listacolaboradores lista = new listacolaboradores();
                lista.setApellidos(cola.getApellidos().toString());
                lista.setCodeusu(cola.getCodigoCol().toString());
                lista.setNombres(cola.getNombres().toString());
                lista.setId(cola.getId().toString());

                listacola.add(lista);
            }
            selectedcolaboradores = new listacolaboradores();

        } catch (Exception r) {
        }




    }
    private StreamedContent dbImage;

    public StreamedContent getDbImage() {
        return dbImage;
    }

    public void handleClose(CloseEvent event) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
                event.getComponent().getId() + " closed", "So you don't like nature?");

        facesContext.addMessage(null, message);
    }

    public void setDbImage(StreamedContent dbImage) {
        this.dbImage = dbImage;
    }
    private FileUpload file;

    public FileUpload getFile() {
        return file;
    }

    public void setFile(FileUpload file) {
        this.file = file;
    }
    private String defaultimagecliente = "R0lGODlhTgBeAHAAACwAAAAATgBeAIf////+/v78/Pza2tqhoaF2dnZvb29paWlqamqFhYXCwsL7+/vW1tZ7e3tkZGRdXV1XV1dVVVVUVFRTU1NNTU1MTExcXFyAgIC2trbx8fH09PSwsLBSUlJKSkpPT09WVlZ6enpaWlo5OTktLS1CQkLV1dW1tbVmZmZbW1tZWVlRUVFOTk5+fn6oqKgvLy8xMTF3d3fk5OTe3t54eHhYWFhfX19eXl5QUFBJSUlBQUGvr68pKSk4ODikpKT9/f29vb1gYGBHR0c+Pj6VlZWjo6OYmJg/Pz8jIyNxcXH4+PiqqqpiYmJLS0tISEiEhISXl5eUlJQhISHs7OympqZGRkZFRUV9fX2Pj4+Hh4ciIiLu7u5jY2NDQ0M9PT2GhobU1NRhYWFAQEBEREQZGRltbW02NjZzc3MaGhq0tLRlZWU7Ozs1NTV0dHRra2sqKiry8vKLi4s6Ojo0NDRubm4VFRWJiYmZmZlnZ2e/v7/Ozs48PDw3NzcwMDDv7+/Z2dnz8/Pl5eXw8PCRkZEyMjITExOampq5ubnX19fm5ubo6Ojn5+dsbGwzMzOIiIj39/fp6enT09MuLi4bGxvc3NyNjY329vbq6urj4+PDw8MSEhKlpaXS0tLi4uLFxcUUFBT6+vqCgoLr6+vR0dGysrIrKyucnJz19fXt7e24uLiWlpaDg4MmJibg4ODJycmxsbHd3d0nJycsLCwlJSXh4eHb29sdHR35+fnf39/BwcEoKCgYGBizs7PY2Nh1dXUcHBwkJCQPDw/Pz8/Q0NCrq6sgICAJCQnExMQfHx8eHh4GBgbMzMzNzc3Ly8sODg6dnZ2ioqIXFxcNDQ3Hx8fGxsaSkpIQEBADAwPKysoCAgLIyMgKCgoBAQHAwMC+vr67u7sAAACpqam8vLy3t7e6urqtra2QkJCfn5+np6dycnJ/f3+bm5uurq6enp6Tk5OsrKygoKBwcHCMjIx5eXl8fHyBgYFoaGiOjo6KiooAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI/wABCBxIsKDBgwRf2YEB44TDRt4QSpxIsaLFgQobRtjIUcxGiFouihwpUsmJCB45cjzRCEYERlnEwHhFsqZNgSZTqlTpsZESJY3EwIQR8qbRia9cbnQY4SRPlGLE+AQaIQsjO0ezFvS20qnTnR6jMopgR8lCMVlOaNWqZOnJtzs3hp0r046dRlXFFF1b044YpnDjhkUJNarMRojz7uV7kevbwGDlFjbM6DAMvFkiMBapzG3TpXGhijYsViZDGGIywdhsEa5DyE/pkq489jTqTEpYIwxppynTnV9Tkp5dmtGJhicZMdK92/dHl19jEx5OW7nx16lXMy+I960yAMp0Sv+WTVyoUOXOT8DcTlAL4Fda4PuNPHi4+eqVg2dqxD6kt78n0ASfFu4JNx5191lnHU8xsScQXhFENCB8rxA2HXnFJRjTSR4xkglNizHmXgT8ETihFlyRNhllCSqI3ly4sVdhBN8NGN+NnUllH4v4KZgZaZmopZt/UgFgYnyvUKhFZyd4o155Cp6nnFWUwaTZdv/lZqOSNuJl1kswhdnjlNaVlsly2/kFIoFItjmgNzDY4Y03dzUklFU+whSTlFaxZ8cJbJpI4aBJEqiMEsoE+ooyjYiJp5jWZZFFiGvxViKbXA7aJpJJdrokWmRKSptVmWThJ1aYatrpqosmqYwyrcL/qoyeYeJpVRZnsudNbphyyiqrsLoaa1K30jolrlcyt6Sinv467KKyvgqrEqJKaq213whJqVaBAlCos8K6Gi20sHqj57XXfpPbkALZ6OuvwcoKLbnSonVtqbjiSpOMIb3bqbzRAiztq6+I8Y0YdhyabxbfJLvdlsAKO+7AFL8qlLx2ZFLqN1g5GJ+3q8Yb68QVS8uIEq9486o3pZbqoEAfLzmswPSWrDJQyqg8pze4fsPfyzfK3OrINVes8so6z5kzw2gCPaHAAZec88o571y1Mhl/E5HH7cIHcNEUH63z1EkrHcE32r0Ms9dRgy3t2GUjfejBarfn9bxSUw230nzv/9xn3QmJmzfVZJOt9NVCbQv04HpfvfPjsioBp8OAYzS42IYbrnLKO1c+0F5Lhl143I8rveiu+3puEIqEN9536d64KrniqqeMdNmvQ97qnKmrflDhjlddOqKxEk+76kviDvvjEhO/qO8TDby81UPvGvuijRSlvech2k7u4cFCa32nZn0H/UEmbg7uyj/FXm5ZZW17fFYhcvqqWUe/PSf+7i/6k10wkFyifMepkPiPIY2wiwLtIsCB/eSBcdoVourXn0LBjGB0uosCJZe/2+3PSXJ6IMqUZbcBGclImxPe9MZ2P+udQE77e+D8jrIpIxmQYKdrn9UIFq3HmURy7RNh7/9E5C4CCWRlgssfuMrWliCK0C7mm+FFapgqae3ugUVEkvSUwZAYWu+BciJioARFr0XdJYEMdJfgVsYSCT7QjQzkFsiYBTUuXgYxeGwExAKGlw+KEIhmKQvMjBI0Mv5LWi5piG1aAoNERawzEPnjG/9nlnXdpJD/mhmjxECVxxyHRDdilUP8+ERAKnBrJOnXt+AFrbbYQSFnZMhbYucrLbgkhJL8467sokebBC1kM3tFIwK0xd4kTGWFDAoMAQnGSsLRLjZZJSsx6L6pTUsMY1OSMmNYymYCkZeorIgq/fW1sCUNaxFAFO/ic0svShJ++PvmXaT4OWk+kl6lQ6c6Ufb/ipMsk5l/hF9ZJMhLS1rEnpo0Z+l6o06VuYSDAO0mPIOoQHqCDJgSG1nOOLgzhvoQUcx0YzMFOtD/ISYiM/RXRo0mSW/0UYVfFKk3N8jA9vGyY7Qbp7PKeb8gWs+j1guqE9/5vwUGMYF67BftdqpR6eWSKsOToEwpKdBAMpCgJ7XhCdG3voTSqZJl+YmXNvpBN04VrCQNYQYTOMZtTbOpr6JpIKnC0S8OlarwXKBd3IhHdyGElXDNmV7h6aWdQfSsIx1sWHeF1ER1yyARI5oD0TjYsQLRrgFFq1WNilWfFPIg04zaq5Cq2MKSMrNU3axRwYgYO4TSreGq48pai0cN/94lnTG9bGZJutkEXvaMrwxae9olsoDR64y0zaNpI1rKqpb2jch1JHy4CkzRMkq52CWLHxGb18rexYl4lC5seRo2RrYEu4XVLVGdq0DKJpCvLfHGkdAXL5K9DYGXye95G/LPu4a1u3pFKnhP2iaukndgf7LNIi+jXfWuV7E3fS8QERPAAoM2sAMbpoI33OBc5hWtC0Sqb99IYflSSCLx4WHN4HScDdumjZidaVpDHFbdUlgJwkWx2w71muP4WJYM6fBTAdxeDQ6VsYjplTil1hsf99ghimyjf8GqWs5KdcItcSSb0FeQFLOwO08OM4kQC+LN3hWrl3HsYy0Sn7EpxXiTYoaITD+s15YCksJJHWNNvAwa18B5Kg+upG4xG0vPttWINsmRePq8FBiQWYR2fSaeR3horUwuKqGB8mmDGmOTTnqAWrWoSFCEF/MYpimOHjKIkYtGZJ5wy6KOpks1spSietfKsALdq89nwzGCa8tcpkiseX2TgAAAOw==";

    public String getDefaultimagecliente() {
        return defaultimagecliente;
    }

    public void setDefaultimagecliente(String defaultimagecliente) {
        this.defaultimagecliente = defaultimagecliente;
    }

    public void handleFileUpload(FileUploadEvent event) throws IOException {

        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");

        FacesContext.getCurrentInstance().addMessage(null, msg);

        dbImage = new DefaultStreamedContent(StreamUtil.parseStringToInputStream(StreamUtil.convertStreamToString(event.getFile().getInputstream())), "image/jpeg");
        iamgecliente = StreamUtil.convertStreamToString(event.getFile().getInputstream());
        //System.out.println(StreamUtil.convertStreamToString(event.getFile().getInputstream()));

    }

    public void persist(Object object) {
        try {
            utx.begin();
            em.persist(object);
            utx.commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            throw new RuntimeException(e);
        }
    }
    private String codigocliente;
    private String nombresclientes;
    private String apellidosclientes;
    private String direccionclientes;
    private String ciudadcliente;
    private String departamentocliente;
    private String emailcliente;
    private String sexocliente;
    private String telefonocasacliente;
    private String telefonocelularcliente;
    private String companiacliente;
    private String observacionesclientes;
    private String colaclinetes;

    private String selectedestilista;

    public String getSelectedestilista() {
        return selectedestilista;
    }

    public void setSelectedestilista(String selectedestilista) {
        this.selectedestilista = selectedestilista;
    }
    public String getColaclinetes() {
        return colaclinetes;
    }

    public void setColaclinetes(String colaclinetes) {
        this.colaclinetes = colaclinetes;
    }

    public String getObservacionesclientes() {
        return observacionesclientes;
    }

    public void setObservacionesclientes(String observacionesclientes) {
        this.observacionesclientes = observacionesclientes;
    }
    private String iamgecliente;

    public String getApellidosclientes() {
        return apellidosclientes;
    }

    public void setApellidosclientes(String apellidosclientes) {
        this.apellidosclientes = apellidosclientes;
    }

    public String getCiudadcliente() {
        return ciudadcliente;
    }

    public void setCiudadcliente(String ciudadcliente) {
        this.ciudadcliente = ciudadcliente;
    }

    public String getCodigocliente() {
        return codigocliente;
    }

    public void setCodigocliente(String codigocliente) {
        this.codigocliente = codigocliente;
    }

    public String getCompaniacliente() {
        return companiacliente;
    }

    public void setCompaniacliente(String companiacliente) {
        this.companiacliente = companiacliente;
    }

    public String getDepartamentocliente() {
        return departamentocliente;
    }

    public void setDepartamentocliente(String departamentocliente) {
        this.departamentocliente = departamentocliente;
    }

    public String getDireccionclientes() {
        return direccionclientes;
    }

    public void setDireccionclientes(String direccionclientes) {
        this.direccionclientes = direccionclientes;
    }

    public String getEmailcliente() {
        return emailcliente;
    }

    public void setEmailcliente(String emailcliente) {
        this.emailcliente = emailcliente;
    }

    public String getIamgecliente() {
        return iamgecliente;
    }

    public void setIamgecliente(String iamgecliente) {
        this.iamgecliente = iamgecliente;
    }

    public String getNombresclientes() {
        return nombresclientes;
    }

    public void setNombresclientes(String nombresclientes) {
        this.nombresclientes = nombresclientes;
    }

    public String getSexocliente() {
        return sexocliente;
    }

    public void setSexocliente(String sexocliente) {
        this.sexocliente = sexocliente;
    }

    public String getTelefonocasacliente() {
        return telefonocasacliente;
    }

    public void setTelefonocasacliente(String telefonocasacliente) {
        this.telefonocasacliente = telefonocasacliente;
    }

    public String getTelefonocelularcliente() {
        return telefonocelularcliente;
    }

    public void setTelefonocelularcliente(String telefonocelularcliente) {
        this.telefonocelularcliente = telefonocelularcliente;
    }
    private HashMap<String, String> maper = new HashMap<String, String>();

    public HashMap<String, String> getMaper() {
        return maper;
    }

    public void setMaper(HashMap<String, String> maper) {
        this.maper = maper;
    }
    private List<listacolaboradoresclientes> colcl = new ArrayList<listacolaboradoresclientes>();

    private List<listadeserviciosagenda> listaseragenda =  new ArrayList<listadeserviciosagenda>();

    public List<listadeserviciosagenda> getListaseragenda() {
        return listaseragenda;
    }

    public void setListaseragenda(List<listadeserviciosagenda> listaseragenda) {
        this.listaseragenda = listaseragenda;
    }
    public List<listacolaboradoresclientes> getColcl() {
        return colcl;
    }

    public void setColcl(List<listacolaboradoresclientes> colcl) {
        this.colcl = colcl;
    }
    private String selectedcolaboradorcliente;
    private String selectedlistaseragenda;

    public String getSelectedlistaseragenda() {
        return selectedlistaseragenda;
    }

    public void setSelectedlistaseragenda(String selectedlistaseragenda) {
        this.selectedlistaseragenda = selectedlistaseragenda;
    }

    public String getSelectedcolaboradorcliente() {
        return selectedcolaboradorcliente;
    }

    public void primeraletranombrecliente() {
        setCodigocliente(getNombresclientes().toString().substring(0, 1));
    }

    public void primeraletraapellidocliente() {
        Query u = getEm().createNativeQuery("SELECT cast(IFNULL(max(SUBSTRING(cod_cliente,3))+1,1) as char(3)) FROM misalondb.clientes");
        String numer = "";

        String nu = (String) u.getSingleResult();
        if (nu.toString().length() == 1) {
            numer = "00" + nu;

        }
        if (nu.toString().length() == 2) {
            numer = "0" + nu;

        }
        if (nu.toString().length() == 3) {
            numer = nu;

        }

        setCodigocliente("");
        setCodigocliente((getNombresclientes() != null ? getNombresclientes().toString().substring(0, 1) : "") + "" + (getApellidosclientes() != null ? getApellidosclientes().toString().substring(0, 1) : "") + numer);
    }

    public void setSelectedcolaboradorcliente(String selectedcolaboradorcliente) {
        this.selectedcolaboradorcliente = selectedcolaboradorcliente;
    }

    public void eliminarservicioagenda(){
    
     mapagenda.remove(getSelectedlistaseragenda());
        listaseragenda.clear();
        Iterator iter = mapagenda.entrySet().iterator();
         while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                listadeserviciosagenda cli = new listadeserviciosagenda();
                cli.setId(entry.getKey().toString());
                cli.setServicio(entry.getValue().toString());
                listaseragenda.add(cli);

            }
    }
    public void eliminarcolaboradorclientes() {
        maper.remove(getSelectedcolaboradorcliente());
        colcl.clear();
        Iterator iter = maper.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            listacolaboradoresclientes cli = new listacolaboradoresclientes();
            cli.setId(entry.getKey().toString());
            cli.setNombres(entry.getValue().toString());
            colcl.add(cli);

        }


    }

    private HashMap<String,String> mapagenda =  new HashMap<String, String>();

    public HashMap<String, String> getMapagenda() {
        return mapagenda;
    }

    public void setMapagenda(HashMap<String, String> mapagenda) {
        this.mapagenda = mapagenda;
    }
    public void agregarlistaagenda(){
          String[] idnombre = getSelectservicioagendacombo().toString().split(",");
          mapagenda.put(idnombre[0], idnombre[1]);
          listaseragenda.clear();
           Iterator iter = mapagenda.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                listadeserviciosagenda cli = new listadeserviciosagenda();
                cli.setId(entry.getKey().toString());
                cli.setServicio(entry.getValue().toString());
                listaseragenda.add(cli);

            }
            setSelectservicioagendacombo("0");
    
    
    }
    
    public void agregarcolaboradoirclientes() {
        String[] idnombre = getColaclinetes().toString().split(",");
        if (colcl.size() == 3) {
        } else {
            maper.put(idnombre[0], idnombre[1]);
            colcl.clear();
            Iterator iter = maper.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                listacolaboradoresclientes cli = new listacolaboradoresclientes();
                cli.setId(entry.getKey().toString());
                cli.setNombres(entry.getValue().toString());
                colcl.add(cli);

            }
        }




    }
    private String servicioclientesvisitas;

    public String getServicioclientesvisitas() {
        return servicioclientesvisitas;
    }

    public void setServicioclientesvisitas(String servicioclientesvisitas) {
        this.servicioclientesvisitas = servicioclientesvisitas;
    }

    
    
    private String selectservicioagendacombo;

    
    public SelectItem[]  getminutoinicio(){
    
    SelectItem[] item = new SelectItem[59];
        
       for(int i = 1 ;i<=59;i++){
            item[i++] = new SelectItem(String.valueOf(i),String.valueOf(i));

        }
        return item;


    }
     
    private String horaini;

    public String getHoraini() {
        return horaini;
    }

    public void setHoraini(String horaini) {
        this.horaini = horaini;
    }
    public String getSelectservicioagendacombo() {
        return selectservicioagendacombo;
    }

    public void setSelectservicioagendacombo(String selectservicioagendacombo) {
        this.selectservicioagendacombo = selectservicioagendacombo;
    }
    
    public SelectItem[] getServiciosclientesagenda() {

        SelectItem[] item = new SelectItem[serviciosFacade.findAll().size()];
        int i = 0;
        for (Servicios c : serviciosFacade.findAll()) {
            item[i++] = new SelectItem(c.getId()+","+c.getDescripcion(), c.getDescripcion());

        }
        return item;



    }

    
    public SelectItem[] getServiciosclientes() {

        SelectItem[] item = new SelectItem[serviciosFacade.findAll().size()];
        int i = 0;
        for (Servicios c : serviciosFacade.findAll()) {
            item[i++] = new SelectItem(c.getId(), c.getDescripcion());

        }
        return item;



    }

    
    public SelectItem[] getEstilistaagenda(){
       SimpleDateFormat f =  new SimpleDateFormat("dd/MM/yyyy");
        Date  di =  new Date();
        Query u  =  getEm().createNativeQuery("SELECT id , id FROM misalondb.colaboradores where id  not in  (SELECT fk_col FROM misalondb.diaslibres_col where DATE_FORMAT(fecha,'%d/%m/%Y') =  '"+f.format(di) +"') ");
        List  l=  u.getResultList();
        SelectItem[] item = null;
        if(l!=null && l.size()>0){
        item = new SelectItem[l.size()];
        Iterator itr =  l.iterator();
        int i = 0;
        while(itr.hasNext()){
        Object[]  o =  (Object[]) itr.next();
        Query  ux =  getEm().createNamedQuery("Colaboradores.findById", Colaboradores.class);
        ux.setParameter("id", (String)o[0]);
        Colaboradores col =  (Colaboradores) ux.getSingleResult();
        item[i++] = new SelectItem(col.getId(), col.getNombrecompleto());
        }
       }
   
        
        return item;
    
    }
    public SelectItem[] getColaboradorclientes() {

        SelectItem[] item = new SelectItem[colaboradoresFacade.findAll().size()];
        int i = 0;
        for (Colaboradores c : colaboradoresFacade.findAll()) {
            item[i++] = new SelectItem(c.getId() + "," + c.getNombrecompleto(), c.getNombrecompleto());

        }
        return item;



    }

    public SelectItem[] getCompaniaclientes() {
        SelectItem[] item = new SelectItem[companiaCelularFacade.findAll().size()];
        int i = 0;
        for (CompaniaCelular c : companiaCelularFacade.findAll()) {
            item[i++] = new SelectItem(c.getId(), c.getDescripcion());

        }
        return item;



    }
    private listadeclientesregistrados selectedclientes;

    public listadeclientesregistrados getSelectedclientes() {
        return selectedclientes;
    }

    public void setSelectedclientes(listadeclientesregistrados selectedclientes) {
        this.selectedclientes = selectedclientes;
    }

    public UserTransaction getUtx() {
        return utx;
    }

    public void setUtx(UserTransaction utx) {
        this.utx = utx;
    }
    private List<listadeclientesregistrados> clientereg = new ArrayList<listadeclientesregistrados>();

    public List<listadeclientesregistrados> getClientereg() {
        return clientereg;
    }

    public void setClientereg(List<listadeclientesregistrados> clientereg) {
        this.clientereg = clientereg;
    }

    public void loadclientesreg() {
        clientereg.clear();
        for (Clientes cl : clientesFacade.findAll()) {
            listadeclientesregistrados cli = new listadeclientesregistrados();
            cli.setApelldios(cl.getApellidos());
            Query  u =   getEm().createNativeQuery("SELECT   max(a.fechavisita) ,max(a.fechavisita) FROM misalondb.clientes_visitas a  where  fk_clientes = '"+cl.getId()+"'");
            List l  =  u.getResultList();
            if(l!=null && l.size()>0){
            Iterator  it =  l.iterator();
            while(it.hasNext()){
            Object[] o = (Object[]) it.next();  
            SimpleDateFormat f =  new SimpleDateFormat("dd/MM/yyyy");
            if((Date)o[0]!=null){
            cli.setUltimafechavisita(f.format((Date)o[0]));
            }
            
                    
            }
            }
            cli.setCelular(cl.getTelcel());
           
            cli.setCodigo(cl.getCodCliente());
            if (cl.getFkCompania() != null) {
                cli.setCompaniacelular(cl.getFkCompania().getDescripcion());
            } else {
                cli.setCompaniacelular("");
            }

            cli.setId(cl.getId());
            cli.setNombres(cl.getNombres());
            clientereg.add(cli);



        }


    }

    public void validaremail() {

        //^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$
        if (!getEmailcliente().toString().equals("")) {

            boolean cumplePatron = Pattern.matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$", getEmailcliente().toString());
            if (!cumplePatron) {
                setEmailcliente("");
                apputils.addsimplemessages("Direccion de Correo invalida");
            }
        }

    }
    private String secripcionserviciocliente;

    public Date getFechavisita() {
        return fechavisita;
    }

    public void setFechavisita(Date fechavisita) {
        this.fechavisita = fechavisita;
    }

    public String getSecripcionserviciocliente() {
        return secripcionserviciocliente;
    }

    public void setSecripcionserviciocliente(String secripcionserviciocliente) {
        this.secripcionserviciocliente = secripcionserviciocliente;
    }
    private Date fechavisita;

    public void claerclientevivitsas() {
        fechavisita = null;
        setServicioclientesvisitas("0");
        setSecripcionserviciocliente("");



    }

    public void listenerclientesvisitas() {
        if (getSelectedclientes() != null) {
            setVicibledelte(true);
            setVisibleadd(false);
            setVisibleupdate(true);
            setCodmasnombrecliente(getSelectedclientes().getCodigo() + "  " + getSelectedclientes().getNombres() + " " + getSelectedclientes().getApelldios());
            Query u = getEm().createNativeQuery("SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio, c.fechavisita FROM  clientes a , servicios b, clientes_visitas c where a.id=fk_clientes and b.id=c.fk_servicios and c.fk_clientes = '" + getSelectedclientes().getId() + "'");
            List l = u.getResultList();
            Iterator i = l.iterator();
            visitas.clear();
            while (i.hasNext()) {
                Object[] o = (Object[]) i.next();
                listavisitasclientes vii = new listavisitasclientes();

                vii.setDescripcion((String) o[3]);
                vii.setId((String) o[0]);
                vii.setIdcli((String) o[1]);
                vii.setIdser((String) o[2]);
                vii.setSerdes((String) o[4]);
                SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
                vii.setFecha(f.format((Date) o[5]));
                visitas.add(vii);


            }
        } else {
            setVicibledelte(true);
            setVisibleadd(true);
            setVisibleupdate(true);


        }

    }
    private listavisitasclientes selectedvisitasclientes;

    public listavisitasclientes getSelectedvisitasclientes() {
        return selectedvisitasclientes;
    }

    public void setSelectedvisitasclientes(listavisitasclientes selectedvisitasclientes) {
        this.selectedvisitasclientes = selectedvisitasclientes;
    }
    private List<listavisitasclientes> visitas = new ArrayList<listavisitasclientes>();

    public List<listavisitasclientes> getVisitas() {
        return visitas;
    }

    public void setVisitas(List<listavisitasclientes> visitas) {
        this.visitas = visitas;
    }
    private String codmasnombrecliente;

    public String getCodmasnombrecliente() {
        return codmasnombrecliente;
    }

    public void setCodmasnombrecliente(String codmasnombrecliente) {
        this.codmasnombrecliente = codmasnombrecliente;
    }

    public void elimianrclientevisitas() {
        Query uu = getEm().createNamedQuery("ClientesVisitas.findById", ClientesVisitas.class);
        uu.setParameter("id",getSelectedvisitasclientes().getId());
        ClientesVisitas cli = (ClientesVisitas) uu.getSingleResult();
        clientesVisitasFacade.remove(cli);
        apputils.addsimplemessages("Datos Eliminados con Exito..!!");
        claerclientevivitsas();
        Query u = getEm().createNativeQuery("SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio, c.fechavisita FROM  clientes a , servicios b, clientes_visitas c where a.id=fk_clientes and b.id=c.fk_servicios and c.fk_clientes = '" + getSelectedclientes().getId() + "'");
        List l = u.getResultList();
        Iterator i = l.iterator();
        visitas.clear();
        while (i.hasNext()) {
            Object[] o = (Object[]) i.next();
            listavisitasclientes vii = new listavisitasclientes();

            vii.setDescripcion((String) o[3]);
            vii.setId((String) o[0]);
            vii.setIdcli((String) o[1]);
            vii.setIdser((String) o[2]);
            vii.setSerdes((String) o[4]);
            SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
            vii.setFecha(f.format((Date) o[5]));
            visitas.add(vii);


        }
        setVicibledelte(true);
        setVisibleadd(false);
        setVisibleupdate(true);
        selectedvisitasclientes = new listavisitasclientes();

    }

    public void uodatevisitasclientes() {

        try {

             Query uu = getEm().createNamedQuery("ClientesVisitas.findById", ClientesVisitas.class);
             uu.setParameter("id",getSelectedvisitasclientes().getId());
            ClientesVisitas cli = (ClientesVisitas) uu.getSingleResult();
            //cli.setId(apputils.getUuid().toString());
            cli.setFechavisita(getFechavisita());
            cli.setFkClientes(getSelectedclientes().getId());
            cli.setFkServicios(getServicioclientesvisitas());
            cli.setDescripcionServicio(getSecripcionserviciocliente().toString());
            clientesVisitasFacade.edit(cli);
            apputils.addsimplemessages("Datos Actualizados con Exito..!!");
            claerclientevivitsas();
            Query u = getEm().createNativeQuery("SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio, c.fechavisita FROM  clientes a , servicios b, clientes_visitas c where a.id=fk_clientes and b.id=c.fk_servicios and c.fk_clientes = '" + getSelectedclientes().getId() + "'");
            List l = u.getResultList();
            Iterator i = l.iterator();
            visitas.clear();
            while (i.hasNext()) {
                Object[] o = (Object[]) i.next();
                listavisitasclientes vii = new listavisitasclientes();

                vii.setDescripcion((String) o[3]);
                vii.setId((String) o[0]);
                vii.setIdcli((String) o[1]);
                vii.setIdser((String) o[2]);
                vii.setSerdes((String) o[4]);
                SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
                vii.setFecha(f.format((Date) o[5]));
                visitas.add(vii);


            }
            setVicibledelte(true);
            setVisibleadd(false);
            setVisibleupdate(true);
            selectedvisitasclientes = new listavisitasclientes();
            /*
            SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio,
            c.fechavisita FROM  clientes a , servicios b, clientes_visitas c
            where a.id=fk_clientes and b.id=c.fk_servicios and c_fk_clientes = ''*/

        } catch (Exception k) {
        }


    }

    public void agregarvisitacliente() {

        try {

            if (fechavisita == null) {
                apputils.addsimplemessages("Debe de Seleccionar Fecha de Visita");
            } else if (getServicioclientesvisitas().toString().equals("0")) {
                apputils.addsimplemessages("Debe de Seleccionar Servicio");

            } else if (getSecripcionserviciocliente().equals("")) {
                apputils.addsimplemessages("Debe Digitar descripcion");
            } else {
                ClientesVisitas cli = new ClientesVisitas();
                cli.setId(apputils.getUuid().toString());
                cli.setFechavisita(getFechavisita());
                cli.setFkClientes(getSelectedclientes().getId());
                cli.setFkServicios(getServicioclientesvisitas());
                cli.setDescripcionServicio(getSecripcionserviciocliente().toString());
                clientesVisitasFacade.create(cli);
                apputils.addsimplemessages("Datos Guadados con Exito");
                claerclientevivitsas();
                Query u = getEm().createNativeQuery("SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio, c.fechavisita FROM  clientes a , servicios b, clientes_visitas c where a.id=fk_clientes and b.id=c.fk_servicios and c.fk_clientes = '" + getSelectedclientes().getId() + "'");
                List l = u.getResultList();
                Iterator i = l.iterator();
                visitas.clear();
                while (i.hasNext()) {
                    Object[] o = (Object[]) i.next();
                    listavisitasclientes vii = new listavisitasclientes();

                    vii.setDescripcion((String) o[3]);
                    vii.setId((String) o[0]);
                    vii.setIdcli((String) o[1]);
                    vii.setIdser((String) o[2]);
                    vii.setSerdes((String) o[4]);
                    SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
                    vii.setFecha(f.format((Date) o[5]));
                    visitas.add(vii);


                }

                /*
                SELECT c.id , c.fk_clientes , fk_servicios ,b.descripcion , c.descripcion_servicio,
                c.fechavisita FROM  clientes a , servicios b, clientes_visitas c
                where a.id=fk_clientes and b.id=c.fk_servicios and c_fk_clientes = ''*/
            }
        } catch (Exception k) {
        }



    }

    private Date fechadenacimiento;

    public Date getFechadenacimiento() {
        return fechadenacimiento;
    }

    public void setFechadenacimiento(Date fechadenacimiento) {
        this.fechadenacimiento = fechadenacimiento;
    }
    public void agregarclientes() {

        try {

            if (getNombresclientes() == null || getNombresclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar  Nombres");

            } else if (getApellidosclientes() == null || getApellidosclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar Apellidos");

            } 
            else if(getFechadenacimiento()==null){
             apputils.addsimplemessages("Debe de Ingresar Fecha de Nacimiento");
            }
            
            else if (getDireccionclientes() == null || getDireccionclientes().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar Direccion");
            } else if (getCiudadcliente() == null || getCiudadcliente().toString().equals("")) {
                apputils.addsimplemessages("Debe de Ingresar la ciudad");
            } else if (getDepartamentocliente().toString().equals("0")) {
                apputils.addsimplemessages("Seleccione un Departamento");
            } else if (getSexocliente().toString().equals("0")) {
                apputils.addsimplemessages("Seleccione Sexo del Cliente");

            } else {

                String idupdateselected = "";
                Clientes cl = new Clientes();
                cl.setApellidos(getApellidosclientes());
                cl.setCodCliente(getCodigocliente());
                cl.setCorreo((getEmailcliente()) != null ? getEmailcliente().toString() : "");
                cl.setDepartamento(getDepartamentocliente());
                cl.setDireccion(getDireccionclientes());
                cl.setFechaIngreso(getFechadenacimiento());
                cl.setFoto((getIamgecliente() != null ? getIamgecliente() : defaultimagecliente));
                idupdateselected = apputils.getUuid().toString();
                cl.setId(idupdateselected);
                cl.setNombres(getNombresclientes());
                cl.setCiudadcliente((getCiudadcliente()!=null ?getCiudadcliente():""));
                cl.setSexo(getSexocliente());
                cl.setTelcasa((getTelefonocasacliente() != null ? getTelefonocasacliente().toString() : ""));
                cl.setTelcel((getTelefonocelularcliente() != null ? getTelefonocelularcliente().toString() : ""));
                if (!getCompaniacliente().toString().equals("0")) {
                    Query u = getEm().createNamedQuery("CompaniaCelular.findById", CompaniaCelular.class);
                    u.setParameter("id", getCompaniacliente().toString());
                    CompaniaCelular com = (CompaniaCelular) u.getSingleResult();
                    cl.setFkCompania(com);
                }
                cl.setObservaciones((getObservacionesclientes()) != null ? getObservacionesclientes().toString() : "");
 
                int cont =0;
                 
                 if(colcl!=null && colcl.size() > 0){
                 String cl1 ="";
                 String cl2 ="";
                 String cl3 ="";
                    Iterator  itr = colcl.iterator();
                    while(itr.hasNext()){
                      listacolaboradoresclientes  l =  (listacolaboradoresclientes) itr.next();
                       if(cont ==0){
                        cl1 = l.getId();
                           
                       }else if(cont ==1){
                       cl2 = l.getId();
                           
                       }else{
                       cl3 = l.getId();
                       
                       }
                       cont++;
                      
                    
                    }
                           cl.setAtendidopor3(cl3);
                           cl.setAtendidopor2(cl2);
                           cl.setAtendidopor1(cl1);
                 
                 }else{
                           cl.setAtendidopor3("");
                           cl.setAtendidopor2("");
                           cl.setAtendidopor1("");
                 
                 
                 }

                
                
                clientesFacade.create(cl);
                apputils.addsimplemessages("Cliente Agregado con Exito ..!");
                setColaclinetes("0");
                methodservicesenable(true);
                getSelectedclientes().setId(idupdateselected);
            }

        } catch (Exception e) {
        }



    }
    
    
    private Date fechayhoracita;

    public Date getFechayhoracita() {
        return fechayhoracita;
    }
    private Date horainiciocita;
    private Date horafincita;

    public Date getHorafincita() {
        return horafincita;
    }

    public void setHorafincita(Date horafincita) {
        this.horafincita = horafincita;
    }

    public Date getHorainiciocita() {
        return horainiciocita;
    }

    public void setHorainiciocita(Date horainiciocita) {
        this.horainiciocita = horainiciocita;
    }

    public void setFechayhoracita(Date fechayhoracita) {
        this.fechayhoracita = fechayhoracita;
    }
    private String vi_nombrecliente;

    public String getVi_nombrecliente() {
        return vi_nombrecliente;
    }

    public void setVi_nombrecliente(String vi_nombrecliente) {
        this.vi_nombrecliente = vi_nombrecliente;
    }

    public String getVi_observaciones() {
        return vi_observaciones;
    }

    public void setVi_observaciones(String vi_observaciones) {
        this.vi_observaciones = vi_observaciones;
    }
    private String vi_observaciones;
    
    private String vi_findbuscarcliente;

    public String getVi_findbuscarcliente() {
        return vi_findbuscarcliente;
    }

    public void setVi_findbuscarcliente(String vi_findbuscarcliente) {
        this.vi_findbuscarcliente = vi_findbuscarcliente;
    }
    public void buscarclienteparacita(){
        
        
        System.out.println("ID seleccionado"+getAutocompletenombres().getId());
        Query  u =  getEm().createNamedQuery("Clientes.findById",Clientes.class);
        u.setParameter("id", getAutocompletenombres().getId());
        List  l =  u.getResultList();
        
        if(l!=null && l.size() > 0){
        
        Clientes c =  (Clientes)u.getSingleResult();
        setVi_nombrecliente(c.getNombres()+" "+c.getApellidos());  
        setFindclientes(c);
        }else{
        setVi_nombrecliente("");  
        }
        autocompletenombres =  new autocompletelista();
        
        
    }
    private String regisnoregis = "No Registrado";
private boolean siregis = false;

    public boolean isNosiregis() {
        return nosiregis;
    }

    public void setNosiregis(boolean nosiregis) {
        this.nosiregis = nosiregis;
    }

    public boolean isSiregis() {
        return siregis;
    }

    public void setSiregis(boolean siregis) {
        this.siregis = siregis;
    }
private boolean nosiregis = true;


    public void registadonoregistado(){
        
        if(getRegisnoregis().equals("No Registrado")){
        setRegisnoregis("Registrado");
        setSiregis(true);
        setNosiregis(false);
        setVi_findbuscarcliente("");
        setVi_nombrecliente("");
        findclientes   =  new Clientes();
        }else{
            setSiregis(false);
            setVi_findbuscarcliente("");
            setVi_nombrecliente("");
        setNosiregis(true);
        setRegisnoregis("No Registrado");
        findclientes   =  new Clientes();
        
        }
    
    
    
    }
    public String getRegisnoregis() {
        return regisnoregis;
    }

    public void setRegisnoregis(String regisnoregis) {
        this.regisnoregis = regisnoregis;
    }
    
    private Clientes findclientes;

    public Clientes getFindclientes() {
        return findclientes;
    }

    public void setFindclientes(Clientes findclientes) {
        this.findclientes = findclientes;
    }
    
    
    public void eliminarcitaclientes(){
        try {
     Query ent =  getEm().createNamedQuery("CitasClientesServicios.findByFkCitasclientes", CitasClientesServicios.class);
     ent.setParameter("fkCitasclientes",getSelectedcitas().getIdtabla() );
     List l =  ent.getResultList();
     if(l!=null && l.size()>0){
         Iterator   i  =  l.iterator();
         CitasClientesServicios cic =  (CitasClientesServicios) i.next();
         citasClientesServiciosFacade.remove(cic);
     }
       
    Query gser  =  getEm().createNamedQuery("CitasClientes.findById", CitasClientes.class);
    gser.setParameter("id", getSelectedcitas().getIdtabla());
    CitasClientes ci =  (CitasClientes)gser.getSingleResult();
    citasClientesFacade.remove(ci);
     methodservicesenable(true);
        navigatejsf = ("iniciocitacliente.xhtml");
       borrarcitasdatosform();
        listacitas.clear();
        loadcitasclientes();
        apputils.addsimplemessages("Cita Eliminada Con Exito ...!!");
        } catch(Exception l){
            
        }
    
    
    }
    public void guardarcitaclientes(){
   
        
        
        
        if(getVi_nombrecliente().toString().equals("")){
            
        apputils.addsimplemessageserror("Si No esta Registardo debe de Ingresar Su nombre");
        }
       else  if( listaseragenda.size()<= 0){
        apputils.addsimplemessageserror("Denbe de Tener al Menos un Servicio");
        
        }
       
         else if(getFechayhoracita()==null){
        apputils.addsimplemessageserror("Debe de Seleccionar la fecha de Cita");
        
        }else if(getHorainiciocita()==null){
        apputils.addsimplemessageserror("Debe de Seleccionar Hora inicio");
            
            
        }else if(getHorafincita()==null){
            apputils.addsimplemessageserror("Debe de Seleccionar Hora Fin");
        
        }
        
        else if(getHorainiciocita().equals(getHorafincita())){
            apputils.addsimplemessageserror("La hora de Inicio con la Hora Fin deben de ser difernetes");
        
        }else if(getHorafincita().before(getHorainiciocita())){
            apputils.addsimplemessageserror("La hora de Fin debe de ser mayor a la Hora de inicio");
        
        }
        
         else if(getHorainiciocita().after(getHorafincita())){
            apputils.addsimplemessageserror("La hora de inicio debe de ser menor a la Hora de Fin");
        
        }
        
        
        
         else if(getSelectedestilista().toString().equals("0")){
            apputils.addsimplemessageserror("Debe de Seleccionar el Estilista");
            
        } 
         
         
         
        
        
        else{
        
             if(getSelectedcitas().getIdtabla()==null){
             
                 
   String idtabla="";
   CitasClientes ci =  new CitasClientes();
    ci.setFechacita(getFechayhoracita());
    idtabla = apputils.getUuid();
       if(getFindclientes().getId()!=null){
           ci.setFkClientes(getFindclientes().getId());
       
       }else{
           ci.setFkClientes(idtabla);
       }
       ci.setFkEstilista(getSelectedestilista());
       ci.setHorafin(getHorafincita());
       ci.setHorainicio(getHorainiciocita());
       
       ci.setId(idtabla);
       ci.setNombrecliente(getVi_nombrecliente());
       ci.setObservaciones(getVi_observaciones());
       if(listaseragenda.size()> 0 && listaseragenda !=null){
           Iterator itr =  listaseragenda.iterator();
            CitasClientesServicios cit =  new CitasClientesServicios();
           while(itr.hasNext()){
               listadeserviciosagenda  al =  (listadeserviciosagenda) itr.next();
              
               cit.setFkServicio(al.getId());
               cit.setId(apputils.getUuid());
                if(getFindclientes().getId()!=null){
                 cit.setFkCliente(getFindclientes().getId());
       
                         }else{
                 cit.setFkCliente(idtabla);
                
                }
                cit.setFkCitasclientes(idtabla);
               
            citasClientesServiciosFacade.create(cit);
           }
      
       
       }
       
    
    citasClientesFacade.create(ci);
    apputils.addsimplemessages("Datos Guardados con Exito");
        }
             else{ // else para update
                 
                 System.out.print("PARA EL UPDATE");
                 
                 
                  
    Query gser  =  getEm().createNamedQuery("CitasClientes.findById", CitasClientes.class);
    gser.setParameter("id", getSelectedcitas().getIdtabla());
    CitasClientes ci =  (CitasClientes)gser.getSingleResult();
    ci.setFechacita(getFechayhoracita());
    
   
      
       ci.setFkClientes(ci.getFkClientes());
       
      
       ci.setFkEstilista(getSelectedestilista());
       ci.setHorafin(getHorafincita());
       ci.setHorainicio(getHorainiciocita());
       
       
       ci.setNombrecliente(getVi_nombrecliente());
       ci.setObservaciones(getVi_observaciones());
       
       
       Query ent =  getEm().createNamedQuery("CitasClientesServicios.findByFkCitasclientes", CitasClientesServicios.class);
       ent.setParameter("fkCitasclientes",ci.getId() );
       List lent =  ent.getResultList();
       if(lent != null && lent.size()>0){
           Iterator itr =  lent.iterator();
           while(itr.hasNext()){
               CitasClientesServicios delci =  (CitasClientesServicios) itr.next();
               citasClientesServiciosFacade.remove(delci);
           
           }
       
       }
       if(listaseragenda.size()> 0 && listaseragenda !=null){
           Iterator itr =  listaseragenda.iterator();
            CitasClientesServicios cit =  new CitasClientesServicios();
           while(itr.hasNext()){
               listadeserviciosagenda  al =  (listadeserviciosagenda) itr.next();
               cit.setFkServicio(al.getId());
               cit.setId(apputils.getUuid());
               cit.setFkCliente(ci.getFkClientes());
               cit.setFkCitasclientes(ci.getId());
       
                        
               
            citasClientesServiciosFacade.create(cit);
           }
      
       
       }
       
    
    citasClientesFacade.edit(ci);
    apputils.addsimplemessages("Datos Actualizados  con Exito");
                 
                 
                 
    



}
             }
        
    }
    
    
    
    
    public void handleDateSelectfechacita(DateSelectEvent event) {  
        FacesContext facesContext = FacesContext.getCurrentInstance();  
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");  
        //facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getDate())));  
        System.out.println(format.format(event.getDate()));
    } 
    public void handleDateSelecthoraini(DateSelectEvent event) {  
        FacesContext facesContext = FacesContext.getCurrentInstance();  
        SimpleDateFormat format = new SimpleDateFormat("hh:mm a");  
        //facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getDate())));  
        System.out.println(format.format(event.getDate()));
    } 
    
    public void handleDateSelecthorafin(DateSelectEvent event) {  
        FacesContext facesContext = FacesContext.getCurrentInstance();  
        SimpleDateFormat format = new SimpleDateFormat("hh:mm a");  
        //facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getDate())));  
        System.out.println(format.format(event.getDate()));
    } 
    
    
    
    
    
    public void citasdeestilistavvalidaciones(){
        
        
        if(!getSelectedestilista().toString().equals("0")){
        Query  u =  getEm().createNamedQuery("CitasClientes.findByFechacitahorainifin", CitasClientes.class);
        u.setParameter("fechacita", getFechayhoracita());
        u.setParameter("horainicio", getHorainiciocita());
        u.setParameter("horafin", getHorafincita());
        u.setParameter("fkEstilista", getSelectedestilista());
        List  l =  u.getResultList();
        
        if(l!=null && l.size() >0){
            CitasClientes ci =  (CitasClientes) u.getSingleResult();
            SimpleDateFormat fecha =  new SimpleDateFormat("dd/MM/yyyy");
            SimpleDateFormat hora =  new SimpleDateFormat("hh:mm a");
            
            String constru = fecha.format(getFechayhoracita())+" "+hora.format(getHorafincita());
            apputils.addsimplemessageserror("Estilista Tiene cita para este dia a esta Hora " +constru);
            
            setSelectedestilista("0");
        }
        }
        
        
        
        
    
    
    
    }
    
    private List<listacitasclientes> listacitas =  new ArrayList<listacitasclientes>();

    public List<listacitasclientes> getListacitas() {
        return listacitas;
    }

    public void setListacitas(List<listacitasclientes> listacitas) {
        this.listacitas = listacitas;
    }
    
    
    
    private listacitasclientes selectedcitas;

    public listacitasclientes getSelectedcitas() {
        return selectedcitas;
    }

    public void setSelectedcitas(listacitasclientes selectedcitas) {
        this.selectedcitas = selectedcitas;
    }
    public void loadcitasclientes(){
        
        
     Query ud =  getEm().createNamedQuery("CitasClientes.findAll", CitasClientes.class);
     List   ll =  ud.getResultList();
    if(ll != null && ll.size()>0){
        Iterator  itr =  ll.iterator();
        while(itr.hasNext()){
        
        CitasClientes c =  (CitasClientes) itr.next();
        
         SimpleDateFormat fecha =  new SimpleDateFormat("dd/MM/yyyy");
         SimpleDateFormat horafin =  new SimpleDateFormat("hh:mm a");
         SimpleDateFormat horainic =  new SimpleDateFormat("hh:mm a");
          listacitasclientes  cit =  new listacitasclientes();
          cit.setCliente(c.getNombrecliente());
          cit.setFechacita(fecha.format(c.getFechacita()));
          cit.setHoracitafin(horafin.format(c.getHorafin()));
          cit.setHoracitaini(horainic.format(c.getHorainicio()));
          cit.setIdtabla(c.getId());
          cit.setSinopresento("");
          Query u =  getEm().createNativeQuery("SELECT nombres , apellidos FROM misalondb.colaboradores where id = '"+c.getFkEstilista()+"'");
          List l = u.getResultList();
          Iterator it =  l.iterator();
          while(it.hasNext()){
              Object[] o = (Object[]) it.next();
              cit.setNombreestilista((String)(o[0]+" "+o[1]));
              
          
          }
     listacitas.add(cit);
    }
     
          
         
          
          
          
          
         
          }
    
        
    
        
        
        
    }
    
    
    private autocompletelista autocompletenombres;

    public autocompletelista getAutocompletenombres() {
        return autocompletenombres;
    }

    public void setAutocompletenombres(autocompletelista autocompletenombres) {
        this.autocompletenombres = autocompletenombres;
    }
    
    private String text;

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    
    public List<autocompletelista> completelist(String query){
    Query u =  getEm().createNativeQuery("SELECT nombres , apellidos , id FROM misalondb.clientes where concat(nombres,\" \",apellidos, \" \",cod_cliente) like '%"+query+"%'");
    List l =  u.getResultList();
    List<autocompletelista> result  =  new ArrayList<autocompletelista>();
    
    if(l!=null && l.size()>0){
    Iterator itr =  l.iterator();
    while(itr.hasNext()){
        autocompletelista  vals =  new autocompletelista();
       Object[] o  = (Object[]) itr.next();
       vals.setId((String)o[2]);
       vals.setNombres((String)o[0]+" "+o[1]);
       result.add(vals);
       
    
    }
       
       
    
    
    }
    return result;
    
    
    
    }
    public List<String> complete(String query) {
        List<String> results = new ArrayList<String>();
        for (int i = 0; i < 10; i++) {
            results.add(query + i);
        }
        return results;
    }
    public void loadcitasform(){
        
    Query  u =  getEm().createNamedQuery("CitasClientes.findById", CitasClientes.class);
   u.setParameter("id", getSelectedcitas().getIdtabla());
   CitasClientes c =  (CitasClientes) u.getSingleResult();
   setFechayhoracita(c.getFechacita());
   setSelectedestilista(c.getFkEstilista());
   setHorafincita(c.getHorafin());
   setHorainiciocita(c.getHorainicio());
   setVi_nombrecliente(c.getNombrecliente());
   setVi_observaciones(c.getObservaciones());
   Query  uc =  getEm().createNativeQuery("SELECT fk_servicio ,fk_servicio , id FROM misalondb.citas_clientes_servicios where fk_cliente ='"+c.getFkClientes().toString()+"' and fk_citasclientes = '"+c.getId()+"'");
   
   List li =  uc.getResultList();
   mapagenda.clear();
   listaseragenda.clear();
   if(li!=null && li.size()>0){
      Iterator itr =  li.iterator();
      while(itr.hasNext()){
          Object[] ser = (Object[]) itr.next();
           listadeserviciosagenda cli = new listadeserviciosagenda();
                
                Query s  =  getEm().createNamedQuery("Servicios.findById", Servicios.class);
                s.setParameter("id",(String)ser[0]);
                Servicios servi =  (Servicios) s.getSingleResult();
                cli.setServicio(servi.getDescripcion());
                cli.setId(servi.getId());
                 mapagenda.put(servi.getId(), servi.getDescripcion());
                listaseragenda.add(cli);
          
      }
   
   }
   
   
    methodservicesenable(true);
        navigatejsf = ("agendaclientes.xhtml");
   
   
        
        
    
    
    }
    
    
    public void nuevacitas(){
    methodservicesenable(true);
        navigatejsf = ("agendaclientes.xhtml");
        
       borrarcitasdatosform();
    
    }
    
    
    
    
    
    
    public void borrarcitasdatosform(){
   fechayhoracita = null;
   setSelectedestilista("0");
   horafincita = null;
   horainiciocita = null;
   setVi_nombrecliente("");
   setVi_observaciones("");
   selectedcitas =  new listacitasclientes();
   listaseragenda.clear();
   mapagenda.clear();
    
    }
    
    
    public void cancelcita(){
    methodservicesenable(true);
        navigatejsf = ("iniciocitacliente.xhtml");
       borrarcitasdatosform();
        listacitas.clear();
        loadcitasclientes();
    
    }
}
